很短.分析属性或方法
本文关键字:方法 分析属性 很短 | 更新日期: 2023-09-27 18:31:36
我过去用过short.Parse(somestring)
。但是最近我看到了short.Parse()
令人困惑的用法,如下所示:
var shortArray = Array.ConvertAll(stringArr, short.Parse);
因此,Array.ConvertAll
期望一个数组和一个转换器。嗯,很好!但是我们如何通过 short.Parse
作为(或喜欢)属性?我在结构Int16
找不到这样的属性。那么,这里到底发生了什么?
Array.ConvertAll
将Converter<TIn, TOut>
委托的实例作为其第二个参数。此委托的签名与 short.Parse
基本相同 - 两者都返回单个参数的值。
编译器会将"方法组"转换为兼容的委托。这称为隐式方法组转换。
为了进行比较,委托的显式创建如下所示:
Array.ConvertAll(stringArr, new Converter<string, short>(short.Parse));
所以,回答你的问题:它仍然是一种方法,而不是一个属性。 您在此处执行的操作是将方法作为委托传递。 您正在为ConvertAll
提供一个要调用的函数:当它转换源数组中的元素时,它将执行short.Parse(element)
并使用新数组中返回的值。
short.Parse
是一种方法。但是可以将方法作为参数传递。
请注意调用方法并传递该方法返回的值(short.Parse()
)与传递方法本身(short.Parse
)之间的区别。
在内部,这将传递方法的地址,以便该参数的接收者可以调用它。