2012-07-18 102 views
1

這可能是一個基本問題,但我用它搜索並沒有找到答案。我希望你能幫助我。考慮我有一個enumContactNumberType枚舉類型參數不起作用

string[] names = Enum.GetNames(typeof(ContactNumberType)) 

如果我使用上面,編譯器爲沒有錯誤,但是當我寫:

string[] names = Enum.GetNames(ContactNumberType) 

它說:

ContactNumberType是類型但像變量一樣使用。

雖然ContactNumberType類型爲Enum,據我所知,和GetNames需要EnumType,所以什麼與該問題的方法的參數?

回答

7

因爲GetNames()方法需要Type類型的參數,所以必須使用typeof。請記住,提供類型名稱與Type的實例不同,後者是包含該類型詳細信息的對象。

傳遞一個類型作爲參數,你有兩個基本的選擇:

  • 傳遞一個Type實例
  • 使用通用

其中第一項(其中有許多舊的方法,如Enum.GetNames()所做的那樣)要求您從類型標識符中獲取Type實例,我們可以使用typeof()運算符來實現該實例。

的這些第二允許傳遞類型名稱作爲參數傳遞給一個方法或類以使該方法或類通用的,往往在較新的方法中使用(泛型引入在.NET 2.0):

var items = someList.OfType<SomeTypeName>(); 

Enum,但是,不具有GetNames()一個通用的形式,允許這一點,雖然你可以創造這樣一個:

public static class EnumHelper 
{ 
    public static string[] GetNames<T>() where T : struct 
    { 
     return Enum.GetNames(typeof(T)) 
    } 
} 

然後你可以調用諸如:

string[] names = EnumHelper.GetNames<ContactNumberType>(); 
0

由於typeof運算符返回的Type

2

GetNames一個對象執行Type類型的參數。問題是ContactNumberType不是Type對象。當您使用typeof運算符時,它會返回適當的Type對象。