2013-11-04 85 views
1

想象一下Func Func<Arguments, bool?>,其中Arguments是一個抽象類。某處,出於某種原因,我創建了這些函數的列表,並將所有派生類作爲參數。當然,在調用Func之前,Arguments的類型對驗證很重要。有沒有辦法獲得Arguments的類型?C#Func <T,TResult>參數驗證

例如爲:

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

而不是它們的列表,將它們存儲在'Dictionary >'中。如果您計劃重複,則可能需要將其作爲關鍵值對的列表。 – Magus

+0

你想知道如何實現'GetFirstArgumentType'嗎? –

+0

您是否在尋找類似[[如何從其父接口獲取實際類型的派生類]](http://stackoverflow.com/q/2520694/2145211),它也適用於派生類? – Harrison

回答

2

您可以使用Type.GetGenericArguments拿到第一個通用參數的System.TypeFunc<T,bool?>

這就是說,存儲一個Dictionary<Type, Delegate>來保存你的類型可能會更容易,只需要直接進行查找。

+0

謝謝!我想這就是我正在尋找的! – JvN

0

根據您的描述,「在某處,出於某種原因,我創建的這些功能與所有類型的派生類作爲參數列表。」我可能會建議你使用a parameter constraint

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

    // ...    
} 

這將讓你檢查你描述的類型。