我有一个C#程序,用户可以在配置文件中指定将Windows声音作为其例行程序的一部分进行播放。我的声音在变量“ parameter”中,并且会像“星号”,“ hand”,“ question”等。在Java中,当我制作Minecraft插件时,枚举有一个.valueOf,我可以传递字符串和如果该字符串与枚举名称之一匹配,则将其返回。我做了System.Media.SystemSounds。看看发生了什么。没有类似的功能(我想是可以预期的,因为我认为它不是枚举)。
有没有一种方法可以轻松地将我的字符串名称转换为匹配的SystemSound?我的意思是,我可以打开string.ToLower()并以这种方式进行操作,但我希望有一种班轮方式。
谢谢!
答案 0 :(得分:0)
有一种方法可以轻松地将我的字符串名称转换为匹配的SystemSound
使用Dictionary<string, SystemSounds>
,然后将所有字符串和声音插入其中。然后稍后通过字符串键查找声音。
否则,您正在寻找的术语称为反射-Get property value from string using reflection in C#
答案 1 :(得分:0)
如果您以enum
开头,如下所示:
public enum Foo
{
Bar = 42, Qaz = 99
}
然后您可以执行以下操作:
Dictionary<string, Foo> map =
typeof(Foo)
.GetEnumValues()
.Cast<Foo>()
.Zip(
typeof(Foo)
.GetEnumValues()
.Cast<int>(),
(n, v) => new { n, v })
.ToDictionary(x => x.n.ToString(), x => (Foo)x.v);
Console.WriteLine((int)map["Bar"]);
Console.WriteLine((int)map["Qaz"]);
输出:
42 99
答案 2 :(得分:0)
您可以使用反射。
enum MyEnum {
Asterix, Hand, Question
}
public static void Main(string[] args)
{
var field = typeof(MyEnum).GetField("Asterix");
var myEnum = field.GetValue(field);
}
myEnum
变量基于提供给typeof(MyEnum).GetField("Asterix")
方法的字符串变量,获取MyEnum.Asterix的值。
答案 3 :(得分:0)
如果您需要按名称访问类SystemSounds
的静态属性 ,则可以使用反射,如下所示:
var sound = System.Media.SystemSounds.Asterisk;
Console.WriteLine(sound);
var name = "Asterisk";
var soundByName = typeof(System.Media.SystemSounds).GetProperty(name).GetValue(null, null); // null, null because it's a static property
Console.WriteLine(soundByName);
Console.WriteLine(sound == soundByName); // Should output 'true'