如果我只拥有我想要访问的变量的名称,我将如何访问对象的变量值?在C#。
假设我有一个变量名列表,表示为数组中的字符串。 例如,我将如何在循环中访问它们。 我可以在Actionscript中执行以下操作:
var arrayOfVariableNames:Array = ["name", "age", "sex"]
for each(var person:Person in persons)
{
if (person[age] > 29) //what is equivalent in c# for object[field]
{
//do something
}
}
答案 0 :(得分:2)
您可以使用反射按名称访问字段:
FieldInfo ageField = typeof(Person).GetField("age");
int age = (int) field.GetValue(person);
答案 1 :(得分:1)
获取变量列表中每个变量的唯一方法是对对象进行反射,但是,最终会得到一组object类型的值,无法知道实际包含的内容的类型(即你最终会得到一个类型为object的变量,用于Name [string],Age [int]和Weight [int])。这使得反射成为从对象获取一组值的不良方式。
但是,访问字段的一般语法是object.value,如下所示:
Person p = new Person ("John", 25, 160); // Name, age, weight (lbs)
Console.WriteLine ("Hello {0}!", p.Name); // Output: "Hello John!"
请注意,Console.WriteLine的这种用法与在C及其同类中使用printf / fprintf非常相似。
答案 2 :(得分:1)
如果我正确理解了你的问题,你可以这样做:
class Person {
private int age;
private string name;
private string sex;
public object this[string name]
{
get
{
PropertyInfo property = GetType().GetField(name);
return property.GetValue(this, null);
}
set
{
PropertyInfo property = GetType().GetField(name);
property.SetValue(this, value, null);
}
}
}
它可以解决您的问题,但如果我的意见很重要,您应该使用普通属性,因为您会失去类型安全性。