C# 在计算数组之后,它显示不能隐式转换类型';十进制',即使我使用十进制数据

C# 在计算数组之后,它显示不能隐式转换类型';十进制',即使我使用十进制数据,c#,asp.net-mvc-3,object,return,C#,Asp.net Mvc 3,Object,Return,在我修复了上面链接中的最后一个问题后,我遇到了一个新的问题,我尝试搜索一个帖子,但我仍然被它击中 在最后一行中,我想使用结果(对象)进行查看,但我不知道如何传递它 问题在最后一行(返回),它说 无法隐式转换类型“decimal” 谢谢大家:) namespace finance3.模型 { 公共类预期风险 { 公共void初始化(整数大小) { Prop=新的十进制[大小]; AxB=新的十进制[大小]; 预测=新小数[大小]; PowAxB=新的十进制[大小]; 名称=新字符串[大小]; }

在我修复了上面链接中的最后一个问题后,我遇到了一个新的问题,我尝试搜索一个帖子,但我仍然被它击中

在最后一行中,我想使用
结果(对象)
进行查看,但我不知道如何传递它

问题在最后一行(返回),它说

无法隐式转换类型“decimal”

谢谢大家:)

namespace finance3.模型
{
公共类预期风险
{
公共void初始化(整数大小)
{
Prop=新的十进制[大小];
AxB=新的十进制[大小];
预测=新小数[大小];
PowAxB=新的十进制[大小];
名称=新字符串[大小];
}
公共十进制[]属性{get;set;}
公共十进制[]预测{get;set;}
公共字符串[]名称{get;set;}
公共十进制[]AxB{get;set;}
公共十进制[]PowAxB{get;set;}
公共十进制期望值(期望值和风险abc)
{
int count=abc.Forecast.count();
预期_和_风险结果=新的预期_和_风险();
结果。初始化(计数);
for(int i=0;i
您正在尝试返回自定义对象,而不是小数

更改:

public decimal  ExpectValue(Expected_and_Risk abc)
为此:

public Expected_and_Risk ExpectValue(Expected_and_Risk abc)

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

public Expected_and_Risk ExpectValue(Expected_and_Risk abc) { //...
不过,我不知道这是否符合你的逻辑

或者,如果有一种方法可以将
预期的\u和\u风险
对象转换为单个数值,则可以声明一个转换运算符或一个实例方法来计算该值,然后返回该值:

return (decimal)Result;


在阅读该答案的其余部分之前,请考虑以下内容:不可能将一个类构造函数作为另一个形式返回而不进行适当的转换。(例如,您可能希望创建的ToDecimal()方法),因此更改:

public decimal ExpectValue(Expected_and_Risk abc)
致:




以下是我对这个问题的看法: 当您放置语句“return(Result);”时,我相信有两个可能的问题。 1) 您应该将return语句的格式设置为:

return (decimal)Result;
2) 您应该已将对象转换为十进制,同时检查结果是否为有效的十进制(必须创建转换方法“ToString()”):


尽管我确信顶部的解决方案会起作用,但如果它不只是尝试上面的另外两种方法。

正如dbaseman解释的那样,您返回的是预期的\u和\u Rick类对象,而您的方法返回类型是decimal。 关于循环,您总是只返回一个预期的_和_Rick对象,因为您在for循环中重写了它。我建议您创建一个列表,其中T将被预期为\u和\u类

   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; 
}
公共列表期望值(期望值和风险abc)
{
int count=abc.Forecast.count();
列表=新列表();
结果。初始化(计数);
for(int i=0;i
另一方面,你可以有:

Expected_and_Risk data = ....
List<Expected_and_Risk> list = ExpectValue(data);
Expected_和_风险数据=。。。。
列表=期望值(数据);

结果是什么?看不到它的声明,而且很明显,
Result
不是类型
decimal
,那么您如何期望函数返回一个不是后者的对象呢?ExpectValue声明为返回一个decimal,但您试图返回一个类型Expected\u和\u Risk。我遗漏了什么吗?@Shai它被声明为预期风险结果=新的预期风险();在ExpectValue方法顶部附近。@Shai我想返回从类到MVC视图创建的名为“Result”的实例。如何修复它?我很抱歉解释得更清楚,因为我是新开发人员c#。
return (decimal)Result;
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;
   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);