想象一下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;
}
答案 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);
// ...
}
这将为您提供您描述的类型检查。