c# - 如何使一个方法采用两种不同的类型

标签 c# generics overloading

我知道这可能是一个非常简单的问题,但我现在脑袋放屁。我正在尝试创建一种可以采用 2 种自定义类型之一的方法。基本上,此方法的主体对于这两种类型都是相同的,因为它们都具有 Name 属性(我正在对 Name 属性进行比较以用于排序)。我应该怎么做?

我的第一个想法是用两种类型作为参数来重载该方法:

int Compare(Type1 first, Type1 second)
int Compare (Type2 first, Type2 second)

但是方法的主体最终是相同的,因此看起来很浪费。

我的下一个想法是使用泛型,但这似乎不对,因为我并没有真正将其设为泛型,因为它只能用于 2 种特定类型。

澄清:“自定义”类型实际上不是我的自定义类型。我的意思是它们不是内置类型。我无法控制这些类型或继承层次结构中的内容。它们恰好都具有 Name 属性。

最佳答案

奇怪的是,到目前为止还没有人发布在我看来是显而易见的选择:将名称作为比较的参数。让调用者 从对象中获取名称属性。如果所有方法都需要使用名称,那么为什么要传递对象的其余部分?

如果你需要对“我可以从这个东西中得到一个名字”的概念进行抽象,那么就这样做:

例子:

int Compare(string name1, string name2) { ... whatever ... }
int Compare<T>(T t1, T t2, Func<T, string> getName)
{
    return Compare(getName(t1), getName(t2));
}

现在你可以说:

Compare(car1, car2, c=>c.Name);
Compare(employee1, employee2, e=>e.Name);

等等。

关于c# - 如何使一个方法采用两种不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680488/

相关文章:

c++ - 跨两个 DLL 的 `using` 语句

c# - 如何在 C# 中使用 Aforge.NET 和 ZXing.NET 从 WebCamera 解码 QRCode

java - Java 中的泛型是否避免了所有 ClassCastExceptins?

java - 泛型:返回类型错误

java - 将 Java 功能与 Wikipedia 的多态性定义相关联

java - 设置具有相同的删除,但都不会覆盖另一个错误

c# - 如何最好地将堆栈跟踪转换为 HTML(使用 .NET - C#)

c# - 从 MySQL 数据库中读取 BLOB 图像

c# - 通过 JSON 对象将 session 对象中的字节数组传递给 Web 服务(Asp.Net 2.0 asmx)

java - java 中的类型检查和泛型会生成警告