恰好两种不同类型的扩展方法

Extension method for precisely two different types

我正在使用下面的代码。它是为某种类型设计的,以限制它在智能感知等方面的弹出性。

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;
}

我能想到的最好的方法如下图,每个类型都有一个入口方法,逻辑在一个私有的地方。当逻辑很广泛时它是有意义的,但当它只有一两行时看起来有点多余。

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] 表示法,因此该选项不可用。

如果 EntityEntity2 共享一个公共接口或基 class,则将其声明为:

public static Generic Get<Generic>(this IEntityCommon input)
{
    return (Generic)input;
}

如果没有并且您已经创建了EntityEntity2等,则添加一个公共接口。该接口不需要定义任何方法,可以为空,它只是为扩展方法提供一个通用类型。

失败了,"CommonLogic" 方式是您最好的选择。

你可能会做那样的事情

    public static TSearch Get<TSource, TSearch>(this TSource obj) where TSource : BaseType, ISomeInterface
    {

    }

T 现在只能是 BaseType 类型并实现 ISomeInterface,但这将无法限制为受支持的修复计数 类

编辑:

您现在可以在实现 ISomeInterface 和 Return 请求类型 TSearch 的类型 BaseType 的对象上使用它。但是,您也可以只使用 where TSource : ISomeInterface。线索是你的 Entity类 实现了这个接口。

检查 where - generic type constratint 以了解如何使用它。