我知道这可能是一个非常简单的问题,但我现在脑袋放屁。我正在尝试创建一种可以采用 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/