我使用下面的代码。它是为特定类型而设计的,以限制它在智能感知等方面的弹出窗口。
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
现在我想对另一种类型使用相同的获取方法(或者,完全覆盖其他几种类型,但仍然是修复数)。所以我添加了第二种方法,代码如下所示。
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
public static Generic Get<Generic>(this Entity2 input)
{
return (Generic)input;
}
令我感到震惊的是,更好的方法是将它保持在同一个方法体中,并且仍然涵盖所有被认为的类型。是否有包含例如的语法签名中有两种不同的类型?类似下面的伪代码。
public static Generic Get<Generic>(this [Entity, Entity2] input)
{
return (Generic)input;
}
我能想到的最佳方法,如下所示,包含每种类型的输入方法和私有位置的逻辑。当逻辑是广泛的时候它是有道理的,但当它只有一两行时看起来有点多余。
public static Generic Get<Generic>(this Entity input)
{
return CommonLogic(input);
}
public static Generic Get<Generic>(this Entity2 input)
{
return CommonLogic(input);
}
private static Generic CommonLogic(Object input)
{
return (Generic)input;
}
答案 0 :(得分:6)
C#不支持[Entity, Entity2]
表示法,因此该选项已用完。
如果Entity
和Entity2
共享一个公共接口或基类,则将其声明为:
public static Generic Get<Generic>(this IEntityCommon input)
{
return (Generic)input;
}
如果没有,您已创建Entity
,Entity2
等,则添加一个通用界面。此接口不需要定义任何方法,也可以为空,它只是为扩展方法提供了一个通用类型。
失败了,&#34; CommonLogic&#34;方式是你最好的选择。
答案 1 :(得分:3)
public static TSearch Get<TSource, TSearch>(this TSource obj) where TSource : BaseType, ISomeInterface
{
}
T现在只能是BaseType
类型并且实现ISomeInterface
,但是这不能使其可以被限制为受支持类的修复计数
修改强>
现在,您可以对实施BaseType
的{{1}}类型的对象和返回请求类型ISomeInterface
使用此功能。但是,您也可以使用TSearch
。线索是你的where TSource : ISomeInterface
类实现了这个接口。
检查where - generic type constratint以了解如何使用它。