0

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

在我解决了上面链接中的最后一个问题后,我遇到了一个新问题,我尝试搜索一个已发布的问题,但我仍然对它印象深刻。

在最后一行我想用来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

4 回答 4

2

您正在尝试返回自定义对象,而不是小数。

改变:

public decimal  ExpectValue(Expected_and_Risk abc)

对此:

public Expected_and_Risk ExpectValue(Expected_and_Risk abc)
于 2012-05-16T06:43:53.870 回答
0

您可以通过更改方法的签名来修复编译错误:

public Expected_and_Risk ExpectValue(Expected_and_Risk abc) { //...

但是,我不知道这对您的逻辑是否有意义。

或者,如果有办法将Expected_and_Risk对象转换为单个数值,则可以声明转换运算符或实例方法来计算该值,然后将其返回:

return (decimal)Result;

或者

return Result.DistillToDecimalValue();
于 2012-05-16T06:44:46.100 回答
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;

虽然我确信顶部的解决方案会起作用,但如果它不只是尝试上面的其他两个。

于 2012-05-16T06:49:10.167 回答
0

正如 dbaseman 解释的那样,您返回的是 Expected_and_Rick 类对象,而您的方法返回类型是十进制。关于循环,您将始终只返回一个 Expected_and_Rick 对象,因为您在 for 循环中覆盖了它。我建议您创建一个列表,其中 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);
于 2012-05-16T06:49:10.903 回答