2015-02-12 53 views
0

我有這個靜態函數來決定傳入參數的類型,如果它是通用的,或者調用內置的ToString()方法,或者調用預定義的自定義輔助器打印出它的全部內容,如果它可以枚舉結束。這是我迄今爲止的;變量被定義爲類型T的函數中的參數undefined C#

public static String ToStringDecider<T> (T value) 
{ 
    Type t = typeof(value); 
    if (t.IsSubclassOf (Array) || t.IsSubclassOf (IList)) 
     return ToString_List (value); 
    else if (t.IsSubclassOf (IEnumerable)) 
     return ToString_Enumerable (value); 
    else if (t.IsSubclassOf (IDictionary)) 
     return ToString_Dictionary (value); 
    else 
     return value.ToString(); 
} 

但是,第一個參考變量value第3行來了一個語法錯誤,說明"The name 'value' does not exist in the current context."任何人都可以解釋爲什麼這是怎麼回事?

+1

你嘗試'value.GetType()'? – chouaib 2015-02-12 01:18:49

+0

爲什麼'typeof()'不夠? – Maurdekye 2015-02-12 01:21:28

+0

不應該是typeof(T)? – Tuco 2015-02-12 01:21:47

回答

2

typeof不會將變量作爲參數,而是類型。

你想要麼:

Type t = typeof(T); 
Type t = value.GetType(); 

注意,也有可能需要調用輔助方法,明確的轉換。

+1

他也很可能需要將't.IsSubclassOf(Array)'更改爲't.IsSubclassOf(typeof(Array))',對於其他比較也是如此。 – 2015-02-12 01:25:41

+0

等待;如果'typeof(Array)'返回'Array'的_type_,那麼'Array'本身是什麼類型的對象?這非常混亂。 – Maurdekye 2015-02-12 01:27:33

+1

@Maurdekye數組的類型是...數組。但是'typeof()'或'GetType()'返回一個'Type'的實例,它是一個允許你訪問關於特定類,接口等的各種元數據的類。可以做的是獲得兩個不同類的「類型」並比較它們以查看它們是否相等(同一類)。我不知道這個解釋是否有幫助,或者更令人困惑,但是你可以[在這裏閱讀更多](https://msdn.microsoft.com/en-us/library/system.type(v = vs.110)的.aspx)。 – 2015-02-12 01:40:45

相關問題