当前位置:  开发笔记 > 编程语言 > 正文

C#3.0 Func/OrderBy类型推断

如何解决《C#3.0Func/OrderBy类型推断》经验,为你挑选了2个好方法。

我今天和OrderBy碰到了奇怪的情况:

Func orderByNumber = 
  currentClass => 
   currentClass.SomeNumber;

然后:

someCollection.OrderBy(orderByNumber);

这很好,但我打算创建一个方法,因为它可能在除orderBy之外的其他地方可用.

private int ReturnNumber(SomeClass currentClass)
{
  return currentClass.SomeNumber;
}

现在,当我尝试将其插入OrderBy时:

someCollection.OrderBy(ReturnNumber);

如果我使用Func,它无法推断它的类型.在我看来它们应该是相同的,因为方法本身就像Func一样是"强类型"的.

旁注:我意识到我可以这样做:

Func orderByNumber = ReturnNumber;

Jacob Carpen.. 8

这也可能与"返回类型推断"无关,而不适用于方法组.

本质上,在Where通用参数仅在输入位置的情况下(如谓词),方法组转换工作正常.但是在泛型参数是返回类型(如Select或者OrderBy投影)的情况下,编译器不会推断出适当的委托转换.



1> Jacob Carpen..:

这也可能与"返回类型推断"无关,而不适用于方法组.

本质上,在Where通用参数仅在输入位置的情况下(如谓词),方法组转换工作正常.但是在泛型参数是返回类型(如Select或者OrderBy投影)的情况下,编译器不会推断出适当的委托转换.



2> yfeldblum..:

ReturnNumber不是一个方法-相反,它表示包含一个方法组所有的名称的方法ReturnNumber,但是具有可能不同的元数和式签名.有一些技术问题可以通过非常通用和每次工作的方式确定您实际想要的方法组中的哪种方法.显然,编译器可以在某些时候,甚至是大多数时候都能找到它,但是决定将算法放入编译器只能工作一半的时间是一个坏主意.

但是,以下工作:

someCollection.OrderBy(new Func(ReturnNumber))

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有