C#Func <t,tresult>参数验证</t,tresult>

时间:2013-11-04 17:56:27

标签: c# func

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

e.g:

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;
}

2 个答案:

答案 0 :(得分:2)

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

话虽这么说,存储Dictionary<Type, Delegate>以保存您的类型可能会更容易,而只是直接查找。

答案 1 :(得分:0)

根据您的描述,“某处,出于某种原因,我创建了一个列表,列出了所有类型的派生类作为参数。”我可能会建议您使用a parameter constraint

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

     // ...              
 }

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