简单来说,你不应该使用名称为 ToString
的扩展方法,因为它永远不会被调用,因为该方法已经存在,而且在那里使用 T
是无用的。
例如,我尝试了这个方法,但结果仍然是一样的:
Console.WriteLine(lst.ToString<int>());
输出:
shekhar, shekhar, shekhar, shekhar
这次我使用了int
,它仍然可以运行,因为T除了更改方法原型之外没有任何用处。
所以简单来说,为什么要使用ToString
文本作为方法名,因为它已经存在,并且你无法在扩展方法中覆盖它,这就是你不得不使用那个T
使其成为通用的原因。使用一些不同的名称,比如
public static string ToMyString(this IList<String> list)
这样,您就不必在那里使用泛型,因为它是无用的,您可以像往常一样调用它。
话虽如此,您的代码对我有效。以下是我尝试过的内容(在LINQPAD中):
void Main()
{
List<string> lst = new List<string>();
lst.Add("shekhar");
lst.Add("shekhar");
lst.Add("shekhar");
lst.Add("shekhar");
lst.ToString<string>().Dump();
}
public static class ListHelper
{
public static string ToString<T>(this IList<String> list)
{
return string.Join(", ", list.ToArray());
}
public static string ToString<T>(this String[] array)
{
return string.Join(", ", array);
}
}
输出结果是shekhar, shekhar, shekhar, shekhar
由于您在调用ToString方法时指定了ToString<T>中的T
,因此需要在调用ToString方法时提供类型,如string
或int
。