0

オブジェクト内にプロパティの配列を含むオブジェクトを作成できません

上記のリンクから最後の問題を修正した後、新しい問題に直面し、投稿されたものを検索しようとしましたが、それでも問題が発生しました。

最後の行で表示に使用したいのですがResult(object)、渡す方法がわかりません。

問題は最後の行(リターン)にある、とそれは言った

タイプ「decimal」を暗黙的に変換することはできません

皆さん、ありがとうございました :)

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);」というステートメントを配置すると、2 つの問題が考えられます。1) return ステートメントを次のようにフォーマットする必要があります。

return (decimal)Result;

2) 結果が有効な 10 進数であることを確認しながら、オブジェクトを 10 進数に変換する必要があります (変換メソッド "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;

上記の他の2つを試してみない限り、上部の解決策が機能すると確信しています。

于 2012-05-16T06:49:10.167 に答える
0

dbaseman が少し説明したように、Expected_and_Rick クラス オブジェクトを返していますが、メソッドの戻り値の型は 10 進数です。ループについては、for ループでオーバーライドするため、常に 1 つの Expected_and_Rick オブジェクトのみが返されます。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 に答える