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

标签 c# extension-methods

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

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

如果 EntityEntity2 共享一个公共(public)接口(interface)或基类,则将其声明为:

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

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

如果做不到,“CommonLogic”方式是您的最佳选择。

关于c# - 恰好两种不同类型的扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30619945/

相关文章:

c# - 如何在 C#.net 中读取 Windows 应用程序根目录中的文件?

c# - 这是为 POCO 实现 ObjectDataSource 排序的方式吗?

c# - 类设计 - 几种可能类型的属性

c# - 重构这个 : Generic extension method

c# - 向现有系统类添加对象

c# - 使用用户名和密码连接到网络驱动器

c# - 使用反射从 Property.GetValue 返回对象列表

Linq where 关键字与 Where 扩展和表达式参数

c# - C# 扩展方法是否仅适用于实例方法?

Swift where 条件检查属性是否已实现