处理对象参数和泛型
本文关键字:泛型 参数 对象 处理 | 更新日期: 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);
}