2013-09-01 39 views
0

我需要爲Tuple實現Comparison委託。我有一個列數,我想通過它來比較元組。如何通過c#中的屬性索引獲取元組屬性?

現在我得:

int sortedColumn; 
Comparison<Tuple<T1, T2, T3>> tupleComparison = (x, y) => 
{ 
    // I want to access x.Item2 if sortedColumn = 2 
     // x.Item3 if sortedColumn = 2 etc  
}; 

我怎樣才能做到這在C#?

我可以不使用switch嗎?

+1

你可以做到這一點,x.Item2應該工作,是什麼問題? –

+0

問題是我不想寫N個if/switch檢查 –

+0

T1,T2,T3是同一類型的嗎? –

回答

2

我大概用if/elseswitch去,但如果你想避免這種情況(例如,您可以與任何Tuple使用它),你可以使用反射:

Comparison<Tuple<T1, T2, T3>> tupleComparison = (x, y) => 
{ 
    var prop = typeof(Tuple<T1, T2, T3>).GetProperty("Item" + sortedColumn); 
    var xItem = prop.GetValue(x); 
    var yItem = prop.GetValue(y); 
    return // something to compare xItem and yItem 
}; 
+0

真棒!正是我一直需要的:) –