2013-04-09 56 views
2

我的遺留代碼有這樣的:這是訪問枚舉的安全方法嗎?

if (chgList != ABCHeader.ChangeListTypes.Always) 

這裏是ABCHeader - 這是一個類(不是變量),並且是在一個非靜態類:

public class ABCHeader 
{ 
    . . . 

    public enum ChangeListTypes 
    { 
    ... 
    } 

chgList這樣定義:

private ABCHeader.ChangeListTypes chgList = ABCHeader.ChangeListTypes.Always; 

這顯然是編譯的,但我認爲這種非靜態類(ABCHeader)被這樣引用並不正確。由於我在這段代碼的某個地方有一個奇怪的空引用異常,查看代碼我偶然發現了這個。這是一個潛在的問題,還是我肯定是在咆哮錯誤的樹?

+3

看起來很好,你應該把你的任務放在構造函數中,雖然 – 2013-04-09 21:00:00

+0

同意,看起來很好。 – 2013-04-09 21:00:11

+0

@ bash.d,爲什麼應該在構造函數中進行賦值? – 2013-04-09 21:18:57

回答

3

這只是嵌套類型。 A class(包括靜態和非靜態)或struct可以在其中包含其他類型。期間.是一個「靜態成員」訪問。這很像你調用靜態方法的時間,比如說ABCHeader.SomeMethod();

這種時間段永遠不會導致實例成員訪問時間段的方式爲NullReferenceException

請注意,.NET Framework使用正+代替句點.來表示嵌套類型。例如:

string typeString = typeof(ABCHeader.ChangeListTypes).ToString(); 
    // will contain a name including "ABCHeader+ChangeListTypes" 
3

這沒什麼錯。您可以通過類名訪問類內部的嵌套枚舉。現在,也就是說,我更喜歡將枚舉放在頂層,而不是嵌套在類中,但是如果這就是你想要的那樣,那麼它就是適合它的語法。

+0

這不是我想要做到的,而是它是如何完成的。 – 2013-04-09 21:18:12

3

以這種方式引用枚舉是完全正確的 - 您無法從中獲得空引用異常。