访问使用含有变量的名称字符串的变量[复制](Accessing a variable using a

2019-06-25 14:57发布

这个问题已经在这里有一个答案:

  • 字符串变量名 4个回答

我从数据库中读取一个字符串变量的名称(如“_datafile”)。 我想知道我可以用这个字符串我的计划之内访问被命名的变量。

使用字典,哈希表,以及开关case语句我已经尝试过,但我想有变量的决心本身动态。 这可能吗?

Answer 1:

你的意思是你想使用的字段名称作为字符串字段的值?

public class MyClass
{
    public string _datafile;

    public MyClass()
    {
        _datafile = "Hello";
    }

    public void PrintField()
    {
        var result = this.GetType().GetField("_datafile").GetValue(this); 
        Console.WriteLine(result); // will print Hello
    }
}

编辑:@Rick,对您的评论作出回应:

public class MyClass
{
    public IEnumerable<string> _parameters = new[] { "Val1", "Val2", "Val3" };

    public void PrintField()
    {
        var parameters = this.GetType().GetField("_parameters").GetValue(this) as IEnumerable;

        // Prints:
        // Val1
        // Val2
        // Val3
        foreach(var item in parameters)
        {
            Console.WriteLine(item);
        }
    }
}


Answer 2:

如果你想获得基于的字符串名称字段的值,你将不得不使用反射。

class MyClass
{
    public int DataFile { get; set; }

    public int _datafile;
}

var ob = new MyClass();
var typ = typeof(MyClass);
var f = typ.GetField("_datafile");
var prop = typ.GetProperty("DataFile");
var val = f.GetValue(ob);
var propVal = prop.GetValue(ob);


Answer 3:

通常你会创建一个代表表记录的值的类。 如果你的表有一个ID一个FirstNameLastName列,你会创建这样一个类

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

然后创建的人员名单

var people = new List<Person>();

现在,您可以添加到列表中的人。

var p = new Person();
p.ID = 5;
p.FirstName = "John";
p.LastName = "Doe";
people.Add(p);

您可以使用DataReader,以便从表中读取

string sql = "SELECT * FROM tblPerson WHERE LastName LIKE @pattern";
cmd = new SqlCommand(sql);
cmd.Connection = "server=test;uid=sa;pwd=manager;database=northwind";
cmd.Parameters.AddWithValue("@pattern", "A%"); // Names beginning with "A"
using (SqlDataReader reader = cmd.ExecuteReader()) {
    // Get column indexes
    int idOrdinal = reader.GetOrdinal("ID");
    int firstNameOrdinal = reader.GetOrdinal("FirstName");
    int lastNameOrdinal = reader.GetOrdinal("LastName");

    while(reader.Read()) {
        var p = new Person();
        p.ID = reader.GetInt32(idOrdinal);
        p.FirstName = reader.GetString(firstNameOrdinal);
        p.LastName = reader.GetString(lastNameOrdinal);
        people.Add(p);
    }
}


文章来源: Accessing a variable using a string containing the variable's name [duplicate]