データベースから文字列変数の名前を読み取っています (例: "_datafile")。この文字列を使用して、プログラム内の名前付き変数にアクセスする方法を知りたいです。
既に辞書、ハッシュ テーブル、および switch-case ステートメントを使用してみましたが、変数を動的に解決したいと考えています。これは可能ですか?
データベースから文字列変数の名前を読み取っています (例: "_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<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);
}
}
}
文字列名に基づいてフィールドの値を取得する場合は、リフレクションを使用する必要があります。
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);
通常、1 つのテーブル レコードの値を表すクラスを作成します。テーブルにID
aFirstName
と aLastName
列がある場合、次のようなクラスを作成します
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);
}
}