2010-09-24 160 views
0

如果我有一個Tuple<int, double>宣佈,我想得到以下。如何在C#中獲取元組的元素?

  1. 一個目的,我會想象這是一種類型的對象,就可以執行該比較,以的obj == typeof(Tuple<>)效果,它將返回true

  2. 一組Type對象,相當於new[]{typeof(int), typeof(double)}。這可以反映出來,因爲元組對象公開它的項目屬性,但是我不知道這些屬性的順序和MSDN文章說我不能依靠觀察...

我需要這個以便爲泛型方法做一個特例,如果它傳遞了一個元組,它應該做一些特殊的事情。像這樣:

void foo<T>(...){ 
    if(T == Tuple<Q, S, ...>){ 
    //special code that needs to know what Q and S and ... are. 
    } 
} 

在此先感謝。

回答

2
if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Tuple<,,>)) 
{ 
} 

您必須事先知道元組參數的數量(在這種情況下,3,所以兩個逗號)。換句話說,元組<>是元組<,>不同,等等。一旦你知道這是正確的類型,您可致電:

typeof(T).GetGenericArguments() 

它返回傳遞給元組的類型參數數組。

+0

非常感謝。可惜我必須事先知道一些論據的數量。我想這是沒有辦法的? – Gleno 2010-09-24 03:16:09

+0

嗯,有很多元組排列,所以你可以爲他們做計劃。例如,可以將所有16個類型存儲在一個數組中,並獲取與類型參數數量相對應的一個== GetGenericArguments()。Length。 – 2010-09-24 04:03:07