使用包含变量名称的字符串访问变量

我正在从数据库中读取字符串变量的名称(例如“_datafile”)。 我想知道如何使用此字符串访问程序中的命名变量。

我已经尝试过使用字典,哈希表和switch-case语句,但我想让变量动态解析。 这可能吗?

您是否想要使用字段名称作为字符串获取字段的值?

 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 _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); } } } 

如果要根据字符串名称获取字段的值,则必须使用reflection。

 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); 

通常,您将创建一个表示一个表记录的值的类。 如果您的表具有FirstNameLastName列的ID ,您将创建一个这样的类

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

然后,您创建一个人员列表

 var people = new List(); 

现在您可以将人员添加到列表中。

 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); } }