只是你不应该使用名称ToString作为扩展方法,因为它永远不会被调用,因为该方法已经存在并且你不应该t 使用 T 因为它在那里没用。
例如,我尝试了这个,它又返回了同样的东西:
Console.WriteLine(lst.ToString<int>());
输出:
shekhar, shekhar, shekhar, shekhar
所以这次我使用了int,它仍然运行,因为除了更改方法原型之外,T 没有任何用处。
那么简单为什么你使用ToString Literal 作为方法名称,因为它已经存在并且你不能在扩展方法中覆盖它,这就是你必须使用@的原因987654327@ 使其通用。使用一些不同的名称,例如
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<T> 中指定了 T,因此在调用 ToString 方法时需要提及 string 或 int 之类的类型。