2011-09-21 144 views
1

嗨有沒有辦法來聲明一個枚舉或自定義的方式來聲明返回在C#中的對象的枚舉?C#語言枚舉聲明

private enum testEnum 
{ 
    firstname =1 
    ,lastname = 2 
} 

如果我們想返回名稱而不是1和2? 像testEnum.firstname返回1。

我想聲明一個枚舉返回像Java一樣的對象。可能嗎?

+0

你能告訴你有什麼或者你想要做的僞代碼嗎? –

+0

private enum testEnum {firstname = 1,lastname = 2}如果我們想返回名稱而不是1和2?像testEnum.firstname返回1。我想聲明一個枚舉來返回像Java一樣的對象。可能嗎? – Kalanamith

+0

所以你試圖把一個枚舉放入一個引用類型中,是嗎? – jv42

回答

1

你可以這樣做:

public class NameEnum 
{ 
    static NameEnum() 
    { 
     FirstName = new NameEnum("FirstName"); 
     LastName = new NameEnum("LastName"); 
    } 

    public static NameEnum FirstName { get; private set; } 
    public static NameEnum LastName { get; private set; } 

    private NameEnum(string name) 
    { 
     this.Name = name; 
    } 

    public string Name { get; private set; } 
} 

那是足夠接近?

0

The docs狀態:

每個枚舉類型都有一個基本類型,其可以是除炭任何整數類型。

假設您的意思是object是複雜/參考類型。那麼你的問題的答案是否定的。您始終可以使用包含引用類型的命名屬性創建一個類。

0

我認爲這是唯一可能的java。

看來你想實現單身約書亞布洛赫的方式。

+0

那會是Joshua Bloch? – spender

+0

@spender:完成更改。 – dhinesh

0

我想你是一個暴露靜態字段的類,然後可以是任何你想要的類型。

1

可以使用接口此:

interface IColorEnum {}; 

class ColorEnum: IColorEnum 
{ 
    public static const Red = new ColorEnum(); 
    public static const Green = new ColorEnum(); 
    public static const Blue = new ColorEnum(); 
}; 

而且使用它像往常一樣:

void foo(IColorEnum color) 
{ 
    if(color == ColorEnum.Red) {...} 
} 

更新+提高:你甚至可以刪除接口,只需使用類夫婦的公共靜態字段與此類的類型和私有構造函數以防止創建新實例:

class ColorEnum 
{ 
    private ColorEnum() {}; 
    public static const Red = new ColorEnum(); 
    public static const Green = new ColorEnum(); 
    public static const Blue = new ColorEnum(); 
};