使用switch将String转换为局部变量

MTo*_*MTo 0 c#

我知道这听起来有点奇怪,但有可能将字符串转换为局部变量,如下所示:

String actionName = "eat";
(local variable)actionName;

Pet.actionName;
//and computer will read it as Pet.eat;
Run Code Online (Sandbox Code Playgroud)

在开关中它看起来像那样:

String actionName = "eat";

switch (actionName)
{
    eat:
       return  Pet.eat;
    default:
       return;
}
Run Code Online (Sandbox Code Playgroud)

Dmi*_*nko 5

你可以使用反射:

  String actionName = "eat"; // Actually, property/field name 

  // looks like you want to get static property
  // without creating Pet instance 
  var result = typeof(Pet).GetProperty(actionName, BindingFlags.Static | BindingFlags.Public).GetValue(null); 
Run Code Online (Sandbox Code Playgroud)

如果actionName实际上是一个字段(不是属性),语法应该稍微改变一下:

var result = typeof(Pet).GetField(actionName, BindingFlags.Static | BindingFlags.Public).GetValue(null);
Run Code Online (Sandbox Code Playgroud)

编辑:如果Pet只是一个枚举,你可以解析

  String actionName = "eat";
  Pet result = (Pet) (Enum.Parse(typeof(Pet), actionName));
Run Code Online (Sandbox Code Playgroud)