我尝试比较两种类型定义。一个定义是Func<,>
。另一个是Func<T,TResults>
的通用定义,我认为它也应该是Func<,>
。
比较返回false:
using System;
using System.Reflection;
namespace ConsoleApplication4
{
public class Program
{
static Func<T, TResult> get_f2<T, TResult>()
{
return input => default(TResult);
}
static void Main(string[] args)
{
Func<int, int> f1 = x => 2 * x;
Type f1_def = f1.GetType().GetGenericTypeDefinition();
MethodInfo f2_maker = typeof(Program).GetMethod("get_f2", BindingFlags.NonPublic | BindingFlags.Static);
Type f2_def = f2_maker.ReturnType;
Console.WriteLine(f1_def.ToString() + " " + f2_def.ToString() + " " + (f1_def == f2_def).ToString());
Console.ReadLine();
}
}
}
我用.net 4.5编译了它。
结果是
System.Func`2[T,TResult] System.Func`2[T,TResult] False
答案 0 :(得分:2)
您的f1_def
打印为System.Func`2[T,TResult]
,因为它是通用类型定义,而Func<,>
只是如何命名其类型参数。
您的f2_def
打印为System.Func`2[T,TResult]
,因为它不是通用类型定义Func<,>
,但它实际上放在您的方法。事情变得混乱,因为Func<,>
的泛型类型参数与您的方法的泛型类型参数具有相同的名称。
您应该能够通过将方法的通用类型参数名称更改为A
和B
来更清楚地看到差异。