pet*_*ust 2 c# generics extension-methods
我正在使用泛型将Java代码转换为C#并且遇到了类似容器的问题:
public static class MyExtensions
{
public static void add(this List<object> list, object obj)
{
list.Add(obj);
}
public static void add(this List<string> list, string s)
{
list.Add(s);
}
}
Run Code Online (Sandbox Code Playgroud)
似乎泛型在比较参数时丢失了,两种方法相互冲突.我想知道仿制药是否可以这种方式使用.是否可以使用单个支持所有列表操作:
public static void add(this List<object> list, object obj)
{
list.Add(obj);
}
Run Code Online (Sandbox Code Playgroud)
例如?
总结所有响应都有相同的解决方案.列表可以抽象为ICollection.总的来说,对于生产代码来说,这可能不是一个好主意.
Mar*_*ell 10
怎么样:
public static void add<T>(this IList<T> list, T value)
{
list.Add(value);
}
Run Code Online (Sandbox Code Playgroud)
(实际上,它可能是ICollection<T>,因为这(不IList<T>)定义Add(T))
你有没有尝试过:
public static void add<T>(this List<T> list, T obj)
{
list.Add(obj);
}
Run Code Online (Sandbox Code Playgroud)
我不确定你是否想把它限制在课堂上,但那应该是你所描述的.
你的意思是这样的:
public static void add<T>(this List<T> list, T obj)
{
list.Add(obj);
}
Run Code Online (Sandbox Code Playgroud)
我认为Marc Gravell回答得最好,但我会补充:
根本不要这样做.没有优势:
myList.add(obj);
Run Code Online (Sandbox Code Playgroud)
VS
myList.Add(obj);
Run Code Online (Sandbox Code Playgroud)
这里唯一的"优势"是大多数开发人员对你的C#看起来都不对.如果您要从Java移植到C#,那么值得花些额外的时间让您的方法看起来像原生.NET方法一样工作.
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |