2011-09-21 113 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(); 
};