我的字典看起来像这样:
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] ) );
有没有办法做到这一点?
答案 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);
}
}