我short.Parse(somestring)过去曾经用过.但最近我看到了如下令人困惑的用法short.Parse():
var shortArray = Array.ConvertAll(stringArr, short.Parse);
Run Code Online (Sandbox Code Playgroud)
所以,Array.ConvertAll期待一个阵列和一个转换器.好吧,好吧!但是我们如何传递 short.Parse as(或类似)属性?我没有在Int16struct中找到这样的属性.那么,这里发生了什么呢?
short.Parse是一种方法.但是可以将方法作为参数传递.
注意调用方法和传递该方法返回的值(short.Parse())并传递方法本身(short.Parse)之间的区别.
在内部,这将传递方法的地址,以便该参数的接收者可以调用它.
Array.ConvertAll将Converter<TIn, TOut>委托的实例作为其第二个参数.该委托的签名基本相同short.Parse- 都返回单个参数的值.
编译器将"方法组"转换为兼容的委托.这称为隐式方法组转换.
为了比较,委托的显式创建如下所示:
Array.ConvertAll(stringArr, new Converter<string, short>(short.Parse));
Run Code Online (Sandbox Code Playgroud)
那么,回答你的问题:它仍然是一种方法,而不是财产.你在这里做的是将方法作为委托传递.您正在提供ConvertAll一个函数来调用:当它转换源数组中的元素时,它将执行short.Parse(element)并使用新数组中返回的值.
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |