I cannot create object that contains arrays of property inside object
在我从上面的链接修复了最后一个问题之后,我遇到了一个新问题,我尝试搜索一个帖子,但我仍然对它感到震惊。
在最后一行,我想使用Result(object)
进行查看,我不知道如何传递它。
问题出在最后一行(返回),它说
无法隐式转换“十进制”类型
谢谢大家:)
namespace finance3.Models
{
public class Expected_and_Risk
{
public 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 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)
{
int count = abc.Forecast.Count();
Expected_and_Risk Result = new Expected_and_Risk();
Result.Initialize(count);
for (int i = 0 ; i < count ; i++)
{
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);
}
// here is the problem
return (Result);
}
}
}
答案 0 :(得分:2)
您正在尝试返回自定义对象,而不是小数。
变化:
public decimal ExpectValue(Expected_and_Risk abc)
到此:
public Expected_and_Risk ExpectValue(Expected_and_Risk abc)
答案 1 :(得分:0)
您可以通过更改方法的签名来修复编译错误:
public Expected_and_Risk ExpectValue(Expected_and_Risk abc) { //...
然而,我不知道这对你的逻辑是否有意义。
或者,如果有一种方法可以将Expected_and_Risk
对象转换为单个数值,则可以声明转换运算符或实例方法来计算该值,然后返回它:
return (decimal)Result;
或
return Result.DistillToDecimalValue();
答案 2 :(得分:0)
在您阅读本答案的其余部分之前,请考虑以下内容:如果没有正确的转换,则不可能将类构造函数作为另一种形式返回。 (例如您可能想要创建的ToDecimal()方法),因此请更改:
public decimal ExpectValue(Expected_and_Risk abc)
为:
public Expected_and_Risk ExpectValue(Expected_and_Risk abc)
这是我对这个问题的看法:
当你发表声明“return(Result);”时,我相信有两个可能的问题。
1)你应该像这样格式化return语句:
return (decimal)Result;
2)您应该已将对象转换为小数,同时检查结果是否为有效小数(您必须创建转换方法“ToString()”):
decimal retVal = 0;
if (!decimal.TryParse(Result.ToString(), out retVal)) throw new ArgumentException("Invalid Result"); //put whatever you want inplace of the argumentexception
return retVal;
虽然我确信顶部的解决方案能够正常运行,但如果它不会尝试上面的其他两个。
答案 3 :(得分:0)
正如dbaseman所说,你返回一个Expected_and_Rick类对象,而你的方法返回类型是十进制。 关于循环,您将始终只返回一个Expected_and_Rick对象,因为您在for循环中覆盖它。我建议你创建一个List,其中T将是Expected_and_Rick类。
public List<Expected_and_Risk> ExpectValue(Expected_and_Risk abc)
{
int count = abc.Forecast.Count();
List<Expected_and_Risk> list = new List<Expected_and_Risk>();
Result.Initialize(count);
for (int i = 0 ; i < count ; i++)
{
Expected_and_Risk Result = new Expected_and_Risk();
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);
list.Add(Result);
}
return list;
}
另一方面,你可以这样:
Expected_and_Risk data = ....
List<Expected_and_Risk> list = ExpectValue(data);