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

Ric*_*ice 7 c# string reflection variables

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

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

Kev*_*mey 5

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

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
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑: @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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Oli*_*bes -1

通常您会创建一个代表一个表记录的值的类。如果您的表有一个IDaFirstName和一个LastName列,您将创建一个像这样的类

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你创建一个人员列表

var people = new List<Person>();
Run Code Online (Sandbox Code Playgroud)

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

var p = new Person();
p.ID = 5;
p.FirstName = "John";
p.LastName = "Doe";
people.Add(p);
Run Code Online (Sandbox Code Playgroud)

您可以使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)