很短.分析属性或方法

本文关键字:方法 分析属性 很短 | 更新日期: 2023-09-27 18:31:36

我过去用过short.Parse(somestring)。但是最近我看到了short.Parse()令人困惑的用法,如下所示:

var shortArray = Array.ConvertAll(stringArr, short.Parse);

因此,Array.ConvertAll期望一个数组和一个转换器。嗯,很好!但是我们如何通过 short.Parse作为(或喜欢)属性?我在结构Int16找不到这样的属性。那么,这里到底发生了什么?

很短.分析属性或方法

Array.ConvertAllConverter<TIn, TOut>委托的实例作为其第二个参数。此委托的签名与 short.Parse 基本相同 - 两者都返回单个参数的值。

编译器会将"方法组"转换为兼容的委托。这称为隐式方法组转换

为了进行比较,委托的显式创建如下所示:

Array.ConvertAll(stringArr, new Converter<string, short>(short.Parse));

所以,回答你的问题:它仍然是一种方法,而不是一个属性。 您在此处执行的操作是将方法作为委托传递。 您正在为ConvertAll提供一个要调用的函数:当它转换源数组中的元素时,它将执行short.Parse(element)并使用新数组中返回的值。

short.Parse是一种方法。但是可以将方法作为参数传递。

请注意调用方法并传递该方法返回的值(short.Parse())与传递方法本身(short.Parse)之间的区别。

在内部,这将传递方法的地址,以便该参数的接收者可以调用它。