我试过这个:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这是行不通的,对于string[]
和List<string>
.也许我需要一些特殊的注释?
Eri*_*ert 109
仅在没有匹配的适用候选方法时才检查扩展方法.在呼叫的情况下,ToString()
将始终存在适用的候选方法,即ToString()
on object
.的扩展方法的目的是延长上的类型的可用的一套方法,不重写现有的方法; 这就是为什么他们被称为"扩展方法".如果要覆盖现有方法,则必须创建重写方法.
只是你不应该使用ToString
扩展方法的名称,因为它永远不会被调用,因为该方法已经存在,你不应该T
在那里使用它。
例如,我试过这个,它又返回了同样的东西:
Console.WriteLine(lst.ToString<int>());
Run Code Online (Sandbox Code Playgroud)
输出:
shekhar, shekhar, shekhar, shekhar
Run Code Online (Sandbox Code Playgroud)
所以这次我使用int
它并且它仍然运行,因为除了更改方法原型之外,T 没有任何用处。
所以简单地说,为什么你使用ToString
Literal 作为方法名称,因为它已经存在并且你不能在 Extension method 中覆盖它,这就是你必须使用它T
来使其通用的原因。使用一些不同的名称,如
public static string ToMyString(this IList<String> list)
Run Code Online (Sandbox Code Playgroud)
这样你就不必使用泛型,因为它在那里没用,你可以像往常一样简单地调用它。
那就是说你的代码对我有用。这是我尝试过的(在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是 shekhar, shekhar, shekhar, shekhar
既然你已经指定T
在ToString<T>
您需要提一类像string
或int
同时调用ToString方法。
听起来你想要取代什么files.ToString()
回报.如果不编写要分配的自定义类files
(即从List和override继承),您将无法做到这一点ToString()
.
首先,摆脱泛型类型(<T>
),你没有使用它.接下来,您将需要重命名扩展方法,因为调用files.ToString()
只会调用List的ToString方法.
这就是你要找的东西.
static class Program
{
static void Main()
{
var list = new List<string> { {"a"}, {"b"}, {"c"} };
string str = list.ToStringExtended();
}
}
public static class ListHelper
{
public static string ToStringExtended(this IList<String> list)
{
return string.Join(", ", list.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24245 次 |
最近记录: |