在c#类中使用循环获取不同变量的值
本文关键字:变量 获取 循环 | 更新日期: 2023-09-27 18:18:31
我有一个类,它有一个不同的变量,像这样:
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; }
}
}
}
方法将使用这个类作为模型,并为其中的每个变量赋值。如何获得所有的值在不同的变量在这个类?谢谢你。
编辑我使用的是Hassan代码,代码是这样的:
foreach (PropertyInfo var in typeof(Example).GetProperties())
{
if (var.Name.Contains("Var"))
{
_dataTable.Rows.Add(_dateDailyBalance, var.GetValue(_justANormalModelOfExample, null));
}
}
但返回全为零。预期收益是某个值。为什么?
添加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);
}
就像Hassan说的,如果你已经决定要使用每个变量作为不同的变量,反射将是循环遍历变量的方法。
但是如果它们都是双精度,为什么不把它们编成数组呢?你可以用很多方法来做这件事…
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();
}
}
}
这允许你像索引数组一样索引类的实例。
因为所有的属性都是相同的类型,所以最好使用indexer。这是一个简单的索引器示例,尝试为您的代码编写它。(我做这个例子是因为它很容易理解)
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