C#中重载函数的执行顺序

时间:2014-10-21 20:28:20

标签: c# execution overloading

只是想知道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

2 个答案:

答案 0 :(得分:4)

有一个更好的算法(C#spects的第7.4.3节)用于决定在存在多个适用的重载的情况下使用哪个方法重载。在这种情况下,IQueryable可以隐式转换为IEnumerable,但IEnumerable不能隐式转换为IQueryable,这使得IQueryable成为{{1}}。更好"过载。

另见
7.4.2.3 Better conversion

答案 1 :(得分:1)

.NET编译器一直在寻找最具体的重载。假设您有一个接受单个参数的简单函数,其中包含对象和字符串参数的重载。如果要传递字符串,则string是一个对象,但字符串重载更具体,因此将调用它。对于复杂的函数签名和许多重载,有时会出现编译器错误“不是最具体的”。另见: