- 有一组我不拥有的类 - 我无法更改它们。
- 我想为每个类添加一个识别参数,使用每个类中的现有字段。
- 因此,我创建了一组扩展方法来从每个类中获取此字段,并为没有特定实现的任何类提供默认值。
这在直接访问新扩展方法时工作得很好(下面示例中的前三个写入),但是当实例首先传递给泛型方法时,选择的扩展方法始终是对象的扩展方法(后三个写入)。
我做错了什么,还是这是 C# 编译器的限制?
public class Call { public string Number { get; set; } }
public class Message { public string Address { get; set; } }
public class Unknown { }
public static class Extensions
{
public static string ID(this object item) { return "Unknown"; }
public static string ID(this Call item) { return item.Number; }
public static string ID(this Message item) { return item.Address; }
}
internal class Program
{
private static void Main()
{
var call = new Call { Number = "555-1212" };
var msg = new Message { Address = "you@email.com" };
var other = new Unknown();
// These work just as I would expect
// - printing out Number, Address, or the default
System.Console.WriteLine("Call = {0}", call.ID());
System.Console.WriteLine("Message = {0}", msg.ID());
System.Console.WriteLine("Unknown = {0}", other.ID());
System.Console.WriteLine();
// These all print out "Unknown"
System.Console.WriteLine("Call = {0}", GetID(call));
System.Console.WriteLine("Message = {0}", GetID(msg));
System.Console.WriteLine("Unknown = {0}", GetID(other));
}
public static string GetID<T>(T item)
{
return item.ID();
}
}