1

想象一下 Func Func<Arguments, bool?>,它Arguments是一个抽象类。在某个地方,出于某种原因,我创建了一个这些函数的列表,其中包含所有类型的派生类作为参数。当然,在调用Arguments之前的类型对于验证很重要。Func有没有办法获得类型Arguments

例如:

public bool? test(Arguments arg) {
    Func test    = Func<SomeArguments, bool?>;
    Type argType = GetFirstArgumentType(test); // gives SomeArguments.GetType();

    if (arg.GetType() == argType) {
        return test(new SomeArguments());
    }
    return null;
}
4

2 回答 2

2

您可以使用Type.GetGenericArguments获取System.Type第一个通用参数的Func<T,bool?>.

话虽如此,存储 a 来保存您的类型可能会更容易Dictionary<Type, Delegate>,而只需进行直接查找即可。

于 2013-11-04T18:03:25.480 回答
0

根据您的描述,“某处,出于某种原因,我创建了一个这些函数的列表,其中包含所有类型的派生类作为参数。”我可能会建议您使用参数约束

 public bool? test<T>(T arg)  where T :Arguments, new()
 { 
     var type = typeof(T);

     // ...              
 }

这将为您提供您描述的类型检查。

于 2013-11-04T18:17:14.923 回答