c# - 在 C# 中通过名称访问类变量

标签 c# asp.net class variables

我正在从 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/

相关文章:

c# - 从 Net 4.6.1/4.7 引用 Net Standard 时出错

asp.net - ASP.NET App 提供图片的最佳方式 : use httphandler or static resource

c# - 在 Linq 中选择 column1 的所有不同的最后记录并按 column2 排序(相应地不工作)

C++ Tic-Tac-Toe 使用类

c# - Sitecore 以编程方式添加布局。值不能为空。参数名称路径

c# - UWP 中的 Process.Start

c++ - 重载运算符 = 在 C++ 中有两个参数

c++ - 错误 : variable or field 'PrintEntity' declared void void PrintEntity(Entity e);

c# - Nunit 框架与 SpecFlow 框架

c# - 扩展 Telerik 客户端模板列并获取通过的值