我过去曾使用short.Parse(somestring)
。但最近我发现short.Parse()
混淆使用如下:
var shortArray = Array.ConvertAll(stringArr, short.Parse);
因此,Array.ConvertAll
需要一个数组和一个转换器。好吧,好吧! 但是我们如何将 short.Parse
作为(或类似)属性传递?我在Int16
struct中找不到这样的属性。那么,这里发生了什么呢?
答案 0 :(得分:5)
short.Parse
是一种方法。但是可以将方法作为参数传递。
注意调用方法和传递该方法返回的值(short.Parse()
)和传递方法本身(short.Parse
)之间的区别。
在内部,这将传递方法的地址,以便该参数的接收者可以调用它。
答案 1 :(得分:5)
Array.ConvertAll
将Converter<TIn, TOut>
委托的实例作为其第二个参数。该委托的签名与short.Parse
基本相同 - 都返回单个参数的值。
编译器将转换&#39;方法组&#39;兼容的代表。这称为隐式方法组转换。
为了进行比较,委托的显式创建如下所示:
Array.ConvertAll(stringArr, new Converter<string, short>(short.Parse));
所以,回答你的问题:它仍然是一种方法,而不是财产。你在这里做的是将方法作为委托传递。您正在为ConvertAll
提供一个函数来调用:当它转换源数组中的元素时,它将执行short.Parse(element)
并使用新数组中返回的值。