我可以为内置的委托Action()和Func()声明一个包含多达16个参数的委托变量。当我对Action()和Func()运行Go to Definition时,我也会得到最大值16,但这是从元数据中获取的。例如,这两行代码编译得很好:
Action<float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float> MAction;
Func <float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float, float> MFunc;
然而,在源代码文件action.cs中,NET4.6的实际源代码显示Action()和Func()的参数的最大计数为8--为什么会有差异?
这来自元数据
#region Assembly System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2\System.Core.dll
#endregion
namespace System
{
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
}
文件action.cs显示最大值8
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
发布于 2017-05-17 03:11:27
出现差异是因为您正在查看错误文件的源文件。对于0-8类型,它们存在于mscorlib.dll
中,但是对于超过8种类型,它们在System.Core.dll
中定义。
如果您查看them的documentation中的Assembly:
,就会看到不同之处。
发布于 2017-05-17 03:09:03
Action.cs。它们在单独的项目中的单独的源文件中,用于单独的程序集,这就是为什么很难找到它们的原因,但它们就在那里。
https://stackoverflow.com/questions/44009486
复制相似问题