处理对象参数和泛型

本文关键字:泛型 参数 对象 处理 | 更新日期: 2023-09-27 18:26:50

我有以下通用方法:

public static string Glue(string prefix, string value)
{
    return String.Format("{0}={1}&", prefix, value);
}
public static string Format<T>(string prefix, T obj) where T : struct
{
    return Glue(prefix, (obj).ToString()); ;
}
public static string Format<T>(string prefix, List<T> obj) where T : struct
{
    return String.Join("",obj.Select(e => Glue(prefix, e.ToString())).ToArray());
}

现在,我想用一个参数来调用它们,该参数以object的形式出现,可以是各种类型。

我开始写一些代码,它开始看起来会有一个很长的if/else序列:

// type of value is object, and newPrefix is string
if (value is int)
{
    return Format(newPrefix, (int)(value));
}
else if (value is double)
{
    return Format(newPrefix, (double)value);
}
...

有没有办法避免这种长序列的if/else?

处理对象参数和泛型

如前所述,没有太多方法可以简化这一点。Format方法被限制为仅采用易于在调用站点检测的值类型(structs)

if (value.GetType().IsValueType) {
  // it's a struct
}

但是,由于无法提供T类型,因此无法使Format调用愉快。

这里可以做的是稍微更改Format。方法调用仅使用ToString方法,该方法在所有类型上都可用。您可以删除struct约束,然后用object表单中已有的值调用它

public static string Format(string prefix, object obj) {
    return Glue(prefix, obj.ToString()); ;
}
if (value.GetType().IsValueType) {
  Format(newPrefix, value);
}