0

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

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

ABC.Property[0]

ABC.Property[1]

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

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

如何用属性数组创建对象?

谢谢你。

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

}
4

3 回答 3

2

您需要在您的类中添加一个构造函数,并且在该构造函数中您可以定义属性的大小

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

另请阅读有关面向对象编程的信息,另请查看这篇文章C# 中的构造函数简介

于 2012-05-16T05:48:12.690 回答
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>而不是数组。这样您就不需要预先指定计数。

于 2012-05-16T05:48:54.597 回答
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;
于 2012-05-16T05:56:49.837 回答