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

时间:2014-08-19 05:00:55

标签: c#

我有一个包含不同变量的类:

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

但它返回全零。预期收益是一些价值。为什么呢?

3 个答案:

答案 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