C#Func<;T、 TResult>;参数验证

C#Func<;T、 TResult>;参数验证,c#,func,C#,Func,想象一下FuncFunc,其中参数是一个抽象类。在某个地方,出于某种原因,我创建了这些函数的列表,其中包含所有类型的派生类作为参数。当然,参数的类型对于调用Func之前的验证非常重要。是否有方法获取参数的类型 e、 g: 公共图书馆?测试(参数arg){ Func测试=Func; 类型argType=GetFirstArgumentType(test);//给出一些参数。GetType(); if(arg.GetType()==argType){ 返回测试(newsomearguments())

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

e、 g:

公共图书馆?测试(参数arg){ Func测试=Func; 类型argType=GetFirstArgumentType(test);//给出一些参数。GetType(); if(arg.GetType()==argType){ 返回测试(newsomearguments()); } 返回null; }
您可以使用来获取
系统。键入
函数的第一个泛型参数的


也就是说,存储一个
字典来保存您的类型可能会更容易,只需直接查找即可。

根据您的描述,“出于某种原因,我在某个地方创建了一个包含所有类型派生类作为参数的函数列表。”我建议您使用:

公共图书馆?test(T arg),其中T:Arguments,new() { var类型=类型(T); // ... }

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

将它们存储在
字典中,而不是它们的列表中。如果您计划有重复项,您可能只需要将其列为键值对列表。您是否正在尝试了解如何实现
GetFirstArgumentType
?是否正在寻找同样适用于派生类的内容?@ReedCopsey:是的;-)虽然我怀疑这是可以挽回的。。(?)@JvN我刚才提供了一个答案-注意,可能有更简单的方法来实现这一点…谢谢!我想这就是我要找的!
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;
}
 public bool? test<T>(T arg)  where T :Arguments, new()
 { 
     var type = typeof(T);

     // ...              
 }