使用整数枚举作为C#中数组的索引而不进行转换?

使用整数枚举作为C#中数组的索引而不进行转换?,c#,enums,C#,Enums,我收集了大量数据,需要将其存储在字符串数组中 然后,该数组作为回调事件传递到另一个类中 所以我需要使用索引作为枚举值,以便外部人员可以轻松地读取字符串值 为了这个我试过这个 public enum PublicData : int { CardNo = 0, CardName = 1, Address = 2, //etc.... } 然后我通过 string[] Publicdata = new string[iLength]; Publicdata[PublicData

我收集了大量数据,需要将其存储在字符串数组中

然后,该数组作为回调事件传递到另一个类中

所以我需要使用索引作为枚举值,以便外部人员可以轻松地读取字符串值

为了这个我试过这个

public enum PublicData : int 
{
  CardNo = 0,
  CardName = 1,
  Address = 2,
   //etc....
}
然后我通过

string[] Publicdata = new string[iLength];
Publicdata[PublicData.CardNo] =  cardNovalue;
但这里我得到了“索引类型无效-错误”


如何解决此问题。

或者您可以使用扩展方法:

public static class MyEnumExtensions
{
    public static int Val(this PublicData en)
    {
        return (int)en;            
    }
}
用法:

Publicdata[PublicData.Address.Val()];

或者您可以使用扩展方法:

public static class MyEnumExtensions
{
    public static int Val(this PublicData en)
    {
        return (int)en;            
    }
}
用法:

Publicdata[PublicData.Address.Val()];

创建自定义集合类,并将PublicData枚举作为索引器添加索引器属性

public enum PublicData : int
{
    CardNo = 0,
    CardName = 1,
    Address = 2,
}

public class PublicdataCollection
{
    private readonly string[] _inner;

    public string this[PublicData index]
    {
        get { return _inner[(int)index]; }
        set { _inner[(int) index] = value; }
    }

    public PublicdataCollection(int count)
    {
        _inner = new string[count];
    }
}

创建自定义集合类,并将PublicData枚举作为索引器添加索引器属性

public enum PublicData : int
{
    CardNo = 0,
    CardName = 1,
    Address = 2,
}

public class PublicdataCollection
{
    private readonly string[] _inner;

    public string this[PublicData index]
    {
        get { return _inner[(int)index]; }
        set { _inner[(int) index] = value; }
    }

    public PublicdataCollection(int count)
    {
        _inner = new string[count];
    }
}

只需转换枚举值

Publicdata[(int)PublicData.CardNo] =  cardNovalue;

只需转换枚举值

Publicdata[(int)PublicData.CardNo] =  cardNovalue;

这里有一个讨论:在我看来,这些不应该是枚举成员,而是数据类的属性。在这里有一个讨论:在我看来,这些不应该是枚举成员,而是数据类的属性。@bati,亲爱的,我知道这一点,但正如我在问题标题中提到的,我需要答案而不转换为int。为什么不直接返回(int)en;@巴蒂,亲爱的,我知道这一点,但正如我在问题标题中提到的,我需要答案,而不转换为int。为什么不直接返回(int)en;寻找一个简单或内置的c#答案。但这似乎是在类中转换为int,如果在线程例程中调用它,我不知道性能如何。最后,转换为int比这更好,因为我需要代码性能。感谢您的ping。正在为此查找简单或内置的c#答案。但这似乎是在类中转换为int,如果在线程例程中调用它,我不知道性能如何。最后,转换为int比这更好,因为我需要代码性能。谢谢你的ping。