【发布时间】:2016-08-30 06:23:21
【问题描述】:
我想知道,如果它们具有相同的属性,是否可以创建一个适用于一组不同类型的扩展方法? 例如:
public static T GetObjectByIdOrName<T>(this IEnumerable<T> collection, Mapping mapping) where T : IType1, IType2, IType3
{
return collection.FirstOrDefault(x => x.Id == mapping.ObjectId || x.Name == mapping.ObjectName);
}
所有类型都有 Id 和 Name 属性,所以我希望这是可能的 - 但是,编译器告诉我 Type1.Id 和 Type2 Id 之间存在不明确的引用...
有什么方法可以实现吗? (我无法为他们创建一个共同的基础)
【问题讨论】:
-
这些课程在你的控制之下吗?
-
该约束意味着该类型必须实现所有 3 个接口。如果它们都公开相同的属性,那么在显式实现任何属性的情况下,它不知道应该通过哪个接口。
-
你能重构让每个接口使用一个基本接口吗?
-
@Bartosz 在这种情况下,您能做的最好的事情就是为每个接口创建 3 个重载。那或使用动态。
-
@Bartosz - 我的回答中实际上包含了“动态”的使用。