我正在使用下面的代码。它是为某种类型设计的,以限制它在智能感知等方面的弹出性。
public static Generic Get<Generic>(this Entity input)
{
return (Generic)input;
}
现在我想对另一种类型使用相同的 Get 方法(或者,为了完全覆盖,一些其他类型,但仍然是固定数量)。所以我添加了第二种方法,代码如下所示。
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;
}
我能想到的最好的方法,如下所示,由每个类型的入口方法和私有(private)地方的逻辑组成。当逻辑很广泛时它是有意义的,但当它只有一两行时看起来有点多余。
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;
}
最佳答案
C# 不支持 [Entity, Entity2]
表示法,因此该选项不可用。
如果 Entity
和 Entity2
共享一个公共(public)接口(interface)或基类,则将其声明为:
public static Generic Get<Generic>(this IEntityCommon input)
{
return (Generic)input;
}
如果没有,并且您已经创建了 Entity
、Entity2
等,则添加一个公共(public)接口(interface)。该接口(interface)不需要定义任何方法,可以为空,它只是为扩展方法提供一个通用类型。
如果做不到,“CommonLogic”方式是您的最佳选择。
关于c# - 恰好两种不同类型的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30619945/