问题 通过变量名称将值分配给变量

加入
2016年7月6日
消息
5
地点
菲律宾
编程经验
1-3
Facebook
BryanJamesIlaga
你好!我正在努力创建自己的orm。数据库字段与模型的类变量相同。现在,我搜索了一种获取列名的方法 c#中的sqldatareader。在我的代码中,"ListAllVars()"列出C#中的变量:

C#:
    public interface IBaseModel
    {
        void ListAllVars();
    }

    public class BaseModel : IBaseModel
    {
        protected string tableName = "old table name";
        protected string timestamp = "some stamp";
        
        public void ListAllVars()
        {
            BindingFlags bindingFlags = BindingFlags.Public |
                            BindingFlags.NonPublic |
                            BindingFlags.Instance |
                            BindingFlags.Static;

            foreach (FieldInfo field in this.GetType().GetFields(bindingFlags))
            {
                Console.WriteLine(field.Name);
            }
        }
    }

    public interface IModel : IBaseModel
    {
        int IntegerMember { get; set; }
        string StringMember { get; set; }
        string ModelName { get; set; }

        void PrintHello();
    }

    public class Model : BaseModel, IModel
    {
        private int integerMember;
        private string stringMember;
        private string modelName;
        private string tableName = "new table name";

        public int IntegerMember
        {
            get => this.integerMember;
            set => this.integerMember = value;
        }

        public string StringMember
        {
            get => this.stringMember;
            set => this.stringMember = value;
        }

        public string ModelName
        {
            get => this.modelName;
            set => this.modelName = value;
        }
    }

既然我具有表的类和列名的变量名称,我希望通过列名(也是一个字符串)在类中为变量分配值。喜欢:

C#:
int userID = 0;
string fieldName = "userID";
string fieldValue = "18";

_some_function_or_method(fieldValue).value(Convert.ToInt32(fieldValue));
Console.WriteLine("User ID value: " + userID);
// outputs "User ID value: 18"

有没有办法实现它?
 

安德兰兰省

Microsoft C#MVP和.NET社区领先
加入
2017年8月31日
消息
4
地点
剑桥,英国
编程经验
10+
推特
angella_andrea
使用反射:使用getfield和setValue方法

你可以使用反思。

以下代码应指向正确的方向。

C#:
    public class User
    {
        public int UserId;
    }


    public class Program
    {
        public static void Main()
        {
            var user = new User();


            SetIntField(user, "UserId", "18");


            Console.WriteLine(user.UserId); // Print 18
        }


        public static void SetIntField<T>(T obj, string fieldName, string fieldValue)
        {
            obj.GetType().GetField(fieldName).SetValue(obj, Convert.ToInt32(fieldValue));
        }
    }
 
最佳 底部