如何将项目添加到<enum1,enum2 =“”> </enum1,>的字典中

时间:2013-12-23 22:56:20

标签: c# dictionary enums runtime enumeration

我的字典看起来像这样:

var myDictionary = new Dictionary<Fruits, Colors>();

水果和颜色是枚举:

public enum Fruits
{
    Apple,
    Banana,
    Orange
}

public enum Colors
{
    Red,
    Yellow,
    Orange
}

我正在尝试在运行时从纯文本文件构建此字典,所以我需要能够做到这样的事情:

private addFruit( string fruit, string color )
{
    myDictionary.Add( Fruits[fruit], Colors[color] );
}

这显然不起作用,但这些都不起作用:

myDictionary.Add( fruit, color );
myDictionary.Add( new KeyValuePair<Fruits, Colors>( fruit, color ) );
myDictionary.Add( new KeyValuePair<Fruits, Colors>( Fruits[fruit], Colors[color] ) );

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:4)

您需要使用Enum.Parse将字符串值解析为枚举值:

private addFruit( string fruit, string color )
{
    Fruits parsedFruit = (Fruits) Enum.Parse(typeof(Fruits), fruit);
    Colors parsedColor = (Colors) Enum.Parse(typeof(Colors), color);
    myDictionary.Add(parsedFruit, parsedColor);
}

如果字符串值与任何枚举值(即null,空值或不在枚举中的字符串)不匹配,则此抛出错误。

在.Net 4.5中,有TryParse方法可能比Parse更合适。

答案 1 :(得分:3)

我相信你需要更像的东西;

 myDictionary.Add(Fruits.Apple, Colors.Red);

如果你有像#34; Apple&#34;和&#34; Red&#34;并希望达到同样的效果,你可以像Enum.Parse那样使用;

 myDictionary.Add(Enum.Parse(typeof(Fruits), fruit), Enum.Parse(typeof(Color), color));

这当然有可能抛出这样的实际情况,在Enum.TryParse调用之外使用Add可能会更好,然后在验证输入字符串之后执行对{{1的实际调用}}

答案 2 :(得分:2)

您需要将字符串值解析为Fruit / Color值。

您可以使用Enum.Parse完成此操作,甚至可以更好地使用.NET Framework 4+ Enum.TryParse<TEnum>

确保在使用Enum.Parse时转换结果,因为它将返回一个Object。

var stringValue = "Apple";
(Fruit)Enum.Parse(typeof(Fruit), stringValue);

我过去在string上创建了一个通用扩展方法,以更友好的方式完成枚举解析。

public static class StringExtensions
{
    public static bool TryParse<TEnum>(this string toParse, out TEnum output)
        where TEnum : struct
    {
        return Enum.TryParse<TEnum>(toParse, out output);
    }
}