質問

次のステートメントを検討してください。

int? v1 = null;

int? v2 = 5 * v1;

の価値は何ですか v2? (null または空の文字列?)

コンパイラが無効な操作としてマークするのを防ぐにはどうすればよいですか?カスタム例外処理に従う必要がありますか?

役に立ちましたか?

解決

これは null.

C#言語仕様3.0(セクション§7.2.7:持ち上げられたオペレーター)

バイナリ演算子向け + - * / % & | ^ << >> :

オペランドと結果タイプがすべて非微量の値タイプである場合、オペレーターの持ち上げられた形が存在します。持ち上げられたフォームは、シングルを追加することで構築されます ? 各オペランドおよび結果タイプへの修飾子。 持ち上げられた演算子はaを生成します null 片方または両方のオペランドがある場合は値 null (例外です &| のオペレーター bool? §7.10.3で説明されているように、タイプ。それ以外の場合、持ち上げられたオペレーターがオペランドを解き、基礎となる演算子を適用し、結果をラップします。


コンパイラが無効な操作としてマークするのを防ぐにはどうすればよいですか?カスタム例外処理に従う必要がありますか?

無効な操作ではありません。この場合、例外を処理する必要はありません。

他のヒント

コンパイラが操作を防止したい場合は、2番目の変数を非微分できません。その後、あなたは書くことを余儀なくされます:

int v2 = 5 * v1.Value;

これにより、V1がnullの場合、実行時に例外がスローされます。

その値は「null」になります。この文脈では、少なくともデータベースnull、すなわち、何もないかゼロではなく、「不明」を意味するのと同じと見なすことができます。未知の5つのロットはまだ不明です。また、文字列ではなく数字を扱っているため、「空の文字列」になることもありません。

「コンパイラが無効な操作としてマークするのを防ぐにはどうすればよいですか?」とはどういう意味ですか?このコードがコンパイルされ、Visual Studio2008の下で私のために正常に実行されるので=)

何をしようとしているのかわかりませんが、V1がnullの場合はV2をnullにしたい場合は、V1が使用する前に値を持っているかどうかをテストする必要があります。

int? v2 = v1.HasValue ? 5 * v1.Value : null;

また

int? v2 = null;
if (v1.HasValue) { v2 = 5 * v1.Value; }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top