我正在从 xml 文件读取数据并具有以下 switch 语句
switch (localVariable)
{
case "myStringVariable":
myClass.myStringVariable= subReader.ReadElementContentAsString();
break;
case "myOtherStringVariable":
myClass.myOtherStringVariable= subReader.ReadElementContentAsString();
break;
case "myBoolVariable":
myClass.myBoolVariable= subReader.ReadElementContentAsBool();
break;
我想将其优化为类似的内容
switch (localVariable)
{
case "myStringVariable":
case "myOtherStringVariable":
myClass.localVariable= subReader.ReadElementContentAsString();
break;
case "myBoolVariable":
myClass.localVariable= subReader.ReadElementContentAsBool();
break;
最佳答案
使用FastMember库,正是为了这个目的,并且比反射快WAAAAY。
转到 Nuget/包管理控制台:
PM> Install-Package FastMember
然后:
public class Foo {
public string Bar { get; set; }
public string Baz { get; set; }
}
class Program {
public static void Main() {
Foo f = new Foo();
var wrapped = ObjectAccessor.Create(f);
string propName = "Baz";
wrapped[propName] = "Ah ha";
Console.WriteLine(f.Baz); //Prints Ah ha
}
}
或者,就您而言:
var myWrappedClass = ObjectAccessor.Create(myClass);
switch (localVariable) {
case "myStringVariable":
case "myOtherStringVariable":
myWrappedClass[localVariable] = subReader.ReadElementContentAsString();
break;
case "myBoolVariable":
myWrappedClass[localVariable] = subReader.ReadElementContentAsBool();
break;
}
完成了,完成了。真的很优雅。
关于c# - 在 C# 中通过名称访问类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380230/