是short.Parse属性还是方法?

时间:2016-01-24 17:29:11

标签: c# .net

我过去曾使用short.Parse(somestring)。但最近我发现short.Parse()混淆使用如下:

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

因此,Array.ConvertAll需要一个数组和一个转换器。好吧,好吧! 但是我们如何将 short.Parse 作为(或类似)属性传递?我在Int16 struct中找不到这样的属性。那么,这里发生了什么呢?

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:5)

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

编译器将转换&#39;方法组&#39;兼容的代表。这称为隐式方法组转换

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

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

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