我无法创建包含对象内属性数组的对象

时间:2012-05-16 05:42:41

标签: c# arrays asp.net-mvc-3

我是c#MVC3的新开发人员。 我有一个问题,我不能创建包含对象内属性数组的对象。

例如,我想为10个数组创建实例ABC.Property []。

ABC.Property [0]

ABC.Property [1]

ABC.Property [2] ..... .... ABC.Property [10]

我使用调试模式检查并发现ABC.Property []为空。所以我无法将值添加回该对象的数组。

如何使用propeties的数组来创建对象?

谢谢。

namespace finance3.Models
{
public class Expected_and_Risk
{


    public decimal[] Prop { get; set; }
    public decimal[] Forecast { get; set; }
    public string[] Name { get; set; }
    public decimal[] AxB { get; set; }
    public decimal[] PowAxB { get; set; }


    public decimal  ExpectValue(Expected_and_Risk abc)
    {

        decimal count = abc.Forecast.Count();

        Expected_and_Risk Result = new Expected_and_Risk();

        for (int i = 0 ; i < count ; i++)
        {
            // here is the problem
            // i cannot add new data to array because it has no dimemsion and i tried this
            //
            // Expected_and_Risk[] Result = new Expected_and_Risk[10];
            //
            // but it didn't work

            Result.Name[i] = abc.Name[i];
            Result.Prop[i] = abc.Prop[i];
            Result.Forecast[i] = abc.Forecast[i];
            Result.AxB[i] = abc.Prop[i] * abc.Forecast[i];


            decimal a = Result.AxB[i];
            decimal sumAxB =+ a;

            double temp = (double)(a * a) ;
            Result.PowAxB[i] = (decimal)(temp);

        }

        return Convert.ToDecimal(Result); 
    }
}

}

3 个答案:

答案 0 :(得分:2)

您需要在类中添加Constructor,并在该构造函数中定义属性的大小

public class Expected_and_Risk
{
//......//your code here
    public Expected_and_Risk()
      {
      this.Prop  = new decimal[10]; // this will define an array of 10 decimal elements for Prop
      }
}

另请阅读有关面向对象编程的内容,另请参阅本文An Intro to Constructors in C#

答案 1 :(得分:2)

目前, Expected_and_Risk中有数组,但您永远不会初始化变量。 可以在构造函数中执行此操作:

public Expected_and_Risk(int count)
{
    Name = new string[count];
    ...
}

...但我建议这实际上是一个讨厌的设计。每当你有很多集合,都有相同的计数,x[0]对应y[0]z[0]等时,你应该考虑拥有一个的集合表示这些属性的封装的自定义类型。例如:

// Must be an int, not a decimal - you can't create an array with a decimal count
int count = abc.Forecast.Count();

// Note: rename type to follow .NET naming conventions
Expected_and_Risk[] results = new Expected_and_Risk[count];
for (int i = 0; i < count; i++)
{
    results[i].Name = abc[i].Name;
    ...
}

...除了当然现在abc也是一个数组。 (目前尚不清楚你是否真的只想在这里复制所有的值,或者是否涉及到一些业务逻辑。有更好的方法来复制值。)

或者,如果你真的想要Expected_and_Risk内的集合,你可能要考虑使用List<T>而不是数组。这样您就不需要预先指定计数。

答案 2 :(得分:0)

更好的方法是将以下方法添加到Expected_and_Risk类中,并在构造函数中调用它。

编辑 - 完成编辑以使Initialize成为私有,并在构造函数中调用它。

void Initialize(int size)
{
    Prop = new decimal[size];
    AxB = new decimal[size];
    Forecast = new decimal[size];
    PowAxB = new decimal[size];
    Name = new string[size];
}

    public Expected_and_Risk(int size)
    {
      ....
      Initialize(size);
    }

之后在ExpectValue中使用它,如

Expected_and_Risk Result = new Expected_and_Risk(size)// size is 10 in example;