在 C# 扩展函数中使用泛型
我正在使用泛型将 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);
}
}
似乎泛型在比较参数时丢失了,并且两种方法发生了冲突。我想要关于是否可以以这种方式使用泛型的任何建议。 ,是否可以使用单个:支持所有列表操作
public static void add(this List<object> list, object obj)
{
list.Add(obj);
}
例如
? 摘要 所有回复都有相同的解决方案。 List可以抽象为ICollection。总的来说,这对于生产代码来说可能不是一个好主意。
I am using generics to translate Java code to C# and having trouble with containers of the sort:
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);
}
}
It seems that the generics are lost in comparing arguments and the two methods collide. I'd like any advice on whether generics can be used in this way. Is it possible to support all list operations with a single:
public static void add(this List<object> list, object obj)
{
list.Add(obj);
}
for example?
SUMMARY All responses have the same solution.
List can be abstracted to ICollection. Overall it's probably not a good idea for production code.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
怎么样:(
实际上,它可能是
ICollection
,因为它(不是IList
)定义了Add(T)
)How about:
(actually, it could be
ICollection<T>
, since this (notIList<T>
) definesAdd(T)
)您是否尝试过:
我不确定您是否想将其限制在一个类中,但这应该可以达到您所描述的效果。
Have you tried:
I'm not sure if you'd want to constrain it to a class or not, but that should do what you're describing.
你的意思是这样吗:
Do you mean this:
我认为 Marc Gravell 回答得最好,但我会添加:
根本不要这样做。没有任何优点:
vs
这里唯一的“优点”是你生成的 C# 对于大多数开发人员来说看起来是错误的。如果您打算从 Java 移植到 C#,那么值得花额外的时间来使您的方法看起来和工作起来像本机 .NET 方法。
I think Marc Gravell answered this best, but I will add:
Don't do this at all. There is no advantage to:
vs
The only "advantage" here is that your resulting C# will look wrong to most developers. If you're going to port from Java to C#, it's worth taking the extra time to make your methods look and work like native .NET methods.
最通用的方式:
The most versatile way:
@Dreamwalker,你是说吗?
list.Add(obj);
@Dreamwalker, did you mean?
list.Add(obj);