【问题标题】:Execution Order Of Overloaded Functions in C#C#中重载函数的执行顺序
【发布时间】:2014-10-21 20:28:19
【问题描述】:

只是想知道 C# 如何确定方法重载中对象的执行顺序 例如我有一个方法

bool SomeMethod(IQueryable source)
{
  //.... Do Work
}

bool SomeMethod(IEnumerable source)
{
   //.... Do Work
}

var Obj = Db.Table.Where(ID > 5);

SomeMethod(Obj);

当我运行此代码时,代码会转到 IQueryable 重载,现在是因为我首先声明了 IQueryable,是因为 IQueryable 是 IEnumerable 类型还是有其他根本原因?

-谢谢

【问题讨论】:

    标签: c# execution overloading


    【解决方案1】:

    有一个更好的算法(C# 规范的第 7.4.3 节)用于决定在有多个适用的重载的情况下使用哪个方法重载。在这种情况下,IQueryable 可以隐式转换为IEnumerable,但IEnumerable 不能隐式转换为IQueryable,从而使IQueryable 成为“更好”的重载。

    另见
    7.4.2.3 Better conversion

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-04-19
        • 2016-04-20
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 2019-11-13
        • 2023-03-27
        • 2022-12-08
        • 2023-03-23
        相关资源
        最近更新 更多