如何将字符串值设置为枚举器

时间:2015-10-23 14:52:03

标签: c# arrays string for-loop enums

我有一个包含整数和字符串的字符串,用逗号分隔。 例如:

  

0,Link Alive,1,Link Dead,2,Link Weak,3,Wiznet 0 Dead,4,Wiznet 1 Dead,5,Wiznets Dead

我想用这样的字符串创建一个枚举:

orientation

我正在考虑将字符串更改为char数组。之后我遍历char数组。 如果我检测到一个整数,我将其值赋给一个临时整数值。如果我检测到一个字符串,我将其值分配给一个临时字符串。在此之后,我将临时整数和字符串分配给枚举器。

唯一的问题是,我不知道如何处理逗号和等号。

有人能告诉我应该怎么做吗?

2 个答案:

答案 0 :(得分:1)

听起来我真的应该做的就是创建一个Dictionary<string,int>,因为除非你要生成代码,否则你不能在运行时更改枚举,它是不变的

现在看着你的字符串:

0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead

看起来你有一组以逗号分隔的值。因此,在,上拆分,然后每对值都是一个int和一个字符串。把它作为字典。

所以一个简单的方法可能看起来像这样(假设你的数据很好,即它有一个偶数个项目,而且每个奇数项目实际上都可以解析为int):

var dict = new Dictionary<int,string>();    
var cells = source.Split(',');
for (var i=0; i < cells.Length; i+=2)
{
    dict[int.Parse(cells[i])] = cells[i+1].Trim();      // Note: you might want to check boundaries first!
}

或者使用Linq,你可以这样做:

    string source = "0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead";
    var dict = source.Split(',')
        .Select((v,i) => new { v, i })
        .GroupBy(x => x.i/2)
        .ToDictionary(x => int.Parse(x.First().v), x => x.Skip(1).First().v.Trim());

这里是fiddle

解释我们在这里做的事情:

  • 首先在Split上使用,字符串。这给了我们一个带["0","Link Alive","1","Link Dead",...]
  • 的字符串数组
  • 接下来,我们使用Select选择每个项目及其在一对中的索引。所以现在我们有一组看起来像[{v="0",i=0},{v="Link Alive",i=1},...]
  • 的对象
  • 现在我们通过将索引除以2来对此进行分组。因为这是整数除法,所以它会截断。所以0/2 == 01/2 == 0以及2/2 == 13/2 == 1。所以我们正在分成几对值。
  • 最后,我们将这些组(我们知道是值对)转换为字典。为此,我们使用每个组中的第一个项目并将其解析为int并将其用作我们字典的关键字。然后我们使用第二个值作为值。这最终给了我们字典

现在有了词典,如果你想查找一个值,那很简单:

var myValue = dict[2];   // myValue is now "Link Weak"

答案 1 :(得分:1)

通过枚举器我假设你的意思是你可以迭代的东西。一个&#39; enum&#39;基本上是一组命名整数。

因此,如果您有一串由逗号分隔的项目,并希望“重复”&#39;对他们来说,这可能会有所帮助:

string input = "0, Link Alive,1, Link Dead,2, Link Weak,3, Wiznet 0 Dead,4, Wiznet 1 Dead,5, Wiznets Dead"
string[] parts = input.split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries);
foreach (string part in parts)
{
    // do something
}