【发布时间】:2016-12-21 18:03:11
【问题描述】:
我有这个方法:
public IEnumerable<MyType> DoSomething<TResult>(Func<MyType, TResult> func)
where TResult : AnotherType
现在我希望这个方法也出现在IEnumerable<AnotherType> 中。所以我写了这个显然不能编译:
public IEnumerable<MyType> DoSomething<TResult>(Func<MyType, TResult> func)
where TResult : IEnumerable<AnotherType>
我得到编译器错误:
已声明具有相同签名的成员
我读过Member with the same signature already defined with different type constraints,它处理成员与另一种返回类型。但是在我的示例中,我不区分方法返回类型,而是区分它的参数列表,首先是Func<MyType, TResult>,第二个是Func<IEnumerable<MyType>, TResult>。但是编译器无法处理。
除了为第二个示例使用另一个方法名称之外,还有其他方法吗?
【问题讨论】:
-
通用约束不是方法签名的一部分,因此您不能创建具有不同约束的相同方法。
-
如果你仍然在定义类型,为什么它是通用的,而不是一个
Func<MyType, AnotherType>和另一个Func<MyType, IEnumerable<AnotherType>>? -
@Dr.Coconut 我已经在我的帖子中提到过这篇文章。
-
@HimBromBeere 哎呀,没注意到链接,抱歉。
-
This Eric Lippert 博客中的帖子是关于该主题的有趣读物。 cmets 表明,设计决定有些争议。