只是想知道C#如何确定Method Overload中对象的执行顺序 例如,我有一个方法
bool SomeMethod(IQueryable source)
{
//.... Do Work
}
bool SomeMethod(IEnumerable source)
{
//.... Do Work
}
var Obj = Db.Table.Where(ID > 5);
SomeMethod(Obj);
当我运行此代码时,代码转到IQueryable Overload,现在是因为我声明了IQueryable First,是因为IQueryable属于IEnumerable类型还是有其他潜在原因?
-Thanks
答案 0 :(得分:4)
有一个更好的算法(C#spects的第7.4.3节)用于决定在存在多个适用的重载的情况下使用哪个方法重载。在这种情况下,IQueryable
可以隐式转换为IEnumerable
,但IEnumerable
不能隐式转换为IQueryable
,这使得IQueryable
成为{{1}}。更好"过载。
答案 1 :(得分:1)
.NET编译器一直在寻找最具体的重载。假设您有一个接受单个参数的简单函数,其中包含对象和字符串参数的重载。如果要传递字符串,则string是一个对象,但字符串重载更具体,因此将调用它。对于复杂的函数签名和许多重载,有时会出现编译器错误“不是最具体的”。另见: