2016-11-17 66 views
-1

我有一个大型的数据集合,我需要在字符串数组中存储相同的数据。使用整数枚举作为C#中的数组的索引而不转换?

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

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

为了这个,我想这一点,

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

的话,我已经通过这个访问,

string[] Publicdata = new string[iLength]; 
Publicdata[PublicData.CardNo] = cardNovalue; 

但在这里我得到 “无效类型的指数 - 错误”

如何解决同样的问题。

+1

有一个关于这个讨论在这里:http://stackoverflow.com/questions/443935/indexing-arrays-with-enums-in-c-sharp –

+0

听起来像那些不应该是枚举成员,而是数据类的属性。 – SimpleVar

回答

0

或者你可以用扩展方法去:

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

用法:

Publicdata[PublicData.Address.Val()]; 
+0

@ bati,亲爱的,我知道这一点,但正如我在我的问题标题中提到的,我需要答案而不转换为int。 –

+0

为什么不只是** return(int)en; ** – Innat3

3

创建自定义集合类,并与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]; 
    } 
} 
+0

寻找一个简单的或内置的C#答案。但是这似乎在类内部转换为int,并且我不知道如果我在线程例程中调用它的性能。最后只是转换为int比这更好,因为我需要代码的性能。感谢ping。 –

0

就投你的枚举值

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