C# 处理对象参数和泛型

C# 处理对象参数和泛型,c#,generics,C#,Generics,我对以下通用方法有一个简单的定义: 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).ToStrin

我对以下通用方法有一个简单的定义:

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());
}

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

如前所述,没有太多方法可以简化这一过程。
Format
方法被限制为仅获取值类型(structs),这在调用站点很容易检测到

if (value.GetType().IsValueType) {
  // it's a struct
}
但是没有办法使
格式
调用愉快,因为您无法提供
t
类型

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

public static string Format(string prefix, object obj) {
    return Glue(prefix, obj.ToString()); ;
}

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

if (value.GetType().IsValueType) {
  Format(newPrefix, value);
}