「ダブルから」変換できませんか? 「アウトダブル」へ

StackOverflow https://stackoverflow.com/questions/1603668

  •  05-07-2019
  •  | 
  •  

質問

書いているアプリには次のコードセクションがあります:

    ...
    String[] Columns = Regex.Split(CurrentLine, Delimeter);
    Nullable<Double> AltFrom;
    ...
    if (AltFrom == null)
    {
       Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
    }
    ...

if句の行はコンパイルされず、エラーが表示されます。「out double?」から変換できません「二重に」

AltFromをNullable型にしないで、それをDoubleとして明示的に宣言すれば、すべてが幸せです。

これは確かに有効なコードです。これはc#のバグですか、何か間違っていますか?

役に立ちましたか?

解決

最初に、double?doubleに暗黙的に変換することはできません。その理由は、nullvalue.HasValueの値を表す場合(つまり、outがfalseの場合)Tの値はどうなるのでしょうか?つまり、refから<=>に変換すると、情報が失われます(縮小変換です)。暗黙の縮小変換は、通常、フレームワークで眉をひそめられます。

しかし、実際に、ここで見ている問題は何か違うものです。タイプ<=>の<=>パラメーターを受け入れるメソッドがある場合、タイプ<=>の変数を渡す必要があります。この場合、非<=>および非<=>パラメーターがあるため、型のバリエーションはありません。

問題を回避するには、次を使用します:

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}

他のヒント

いいえ、outパラメータはdoubleではなくNullable<double>である必要があります。

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top