我是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);
}
}
}
答案 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;