计算数组后,它显示无法隐式转换类型'decimal',即使我使用了十进制数据

时间:2012-05-16 06:35:13

标签: c# asp.net-mvc-3 object return

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

}

4 个答案:

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