Accedere a una variabile usando una stringa contenente il nome della variabile

Sto leggendo il nome di una variabile stringa dal database (ad esempio “_datafile”). Voglio sapere come posso accedere a una variabile con nome all’interno del mio programma usando questa stringa.

Ho già provato a usare un dizionario, una tabella hash e un’istruzione switch-case, ma mi piacerebbe che la variabile si risolvesse dynamicmente. È ansible?

Vuoi dire che vuoi ottenere il valore di un campo usando il nome del campo come una stringa?

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

EDIT: @Rick, per rispondere al tuo commento:

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

Se si desidera ottenere il valore di un campo in base al nome della stringa, sarà necessario utilizzare la riflessione.

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

Di solito si crea una class che rappresenta i valori di un record di tabella. Se la tua tabella ha un ID una colonna FirstName e LastName , dovresti creare una class come questa

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

Quindi crei una lista di persone

 var people = new List(); 

Ora puoi aggiungere persone alla lista.

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

È ansible utilizzare un DataReader per leggere da una tabella

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