我有一个包含不同变量的类:
namespace Model
{
public class Example
{
private double _var1;
private double _var2;
private double _var3;
private double _var4;
private double _var5;
public double Var1
{
get { return _var1; }
set { _var1 = value; }
}
public double Var2
{
get { return _var2; }
set { _var2 = value; }
}
public double Var3
{
get { return _var3; }
set { _var3 = value; }
}
public double Var4
{
get { return _var4; }
set { _var4 = value; }
}
public double Var5
{
get { return _var5; }
set { _var5 = value; }
}
}
}
方法将此类用作模型,并为其中的每个变量赋值。 如何在这个类中获取不同变量的所有值?谢谢。
EDIT 我正在使用Hassan代码,代码如下所示:
foreach (PropertyInfo var in typeof(Example).GetProperties())
{
if (var.Name.Contains("Var"))
{
_dataTable.Rows.Add(_dateDailyBalance, var.GetValue(_justANormalModelOfExample, null));
}
}
但它返回全零。预期收益是一些价值。为什么呢?
答案 0 :(得分:3)
添加System.Reflection
命名空间:
例如,为每个属性设置0.1
。
Example obj = new Example();
Type type = obj.GetType();
PropertyInfo[] properties = type.GetProperties();
double d = 0.1;
foreach (PropertyInfo property in properties)
{
property.SetValue(obj, d, null);
}
答案 1 :(得分:1)
正如哈桑所说,如果你已经将每个变量用作不同的变量,那么反射就是循环变量的方法。
但是,如果他们都是双打,为什么不排他们?你可以通过多种方式做到这一点......
namespace Model
{
public class Example : IEnumerable<double>
{
private double vars = new double[5];
protected double this[int ix]
{
get { return vars[ix]; }
set { vars[ix] = value; }
}
public IEnumerator<double> GetEnumerator()
{
return vars;
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return ((IEnumerable<double>)this).GetEnumerator();
}
}
}
这允许您将类的实例索引为数组。
答案 2 :(得分:1)
因为所有属性都属于同一类型,所以最好使用索引器。这是一个简单的索引器示例,尝试为您的代码编写它。 (我做这个例子是因为它很容易理解)
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClass me = new MyClass();
//you can use me[index] = value for accessing the index of your indexer
for (int i = 0; i < 3; i++)
{
MessageBox.Show(me[i]);
}
}
}
class MyClass
{
string[] name = { "Ali", "Reza", "Ahmad" };
public string this[int index]
{
get { return name[index]; }
set { name[index] = value; }
}
}
如果您对理解代码有任何问题,请告诉我。你需要改变
string[]
到
double[]
代码。
了解更多信息,请参阅:
http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx