質問
書いているアプリには次のコードセクションがあります:
...
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
に暗黙的に変換することはできません。その理由は、null
がvalue.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;
}
所属していません StackOverflow