在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));
        }
    }

但返回全为零。预期收益是某个值。为什么?

在c#类中使用循环获取不同变量的值

添加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