2017-07-17 17 views
2

以下のプログラムを検討してください。私はなぜこのコードが別の方法で動作するのか知りたいです。int? Nullable <int>は同じですか、なぜ彼らは異なる方法で動作しますか?

これはコンパイル時にエラーを返して:

void access<T>(T val, bool result){ 
var getaccess = val is int? & result; 
} 

これは、エラーを返していない:?&がオーバーロードされ、また条件演算子を示すことができるので

void access<T>(T val, bool result){ 
var getaccess = val is Nullable<int> & result; 
} 
+0

は、コンパイル時エラー(コード/説明/参照)を提供します –

+0

おそらくこれはあなたを助けるでしょう[Nullable とint? - 違いはありますか?](https://stackoverflow.com/questions/4028830/nullableint-vs-int-is-there-any-difference)回答を見てください qqbenq –

+4

[Nullable とintの重複の可能性がありますか? - 違いはありますか?](https://stackoverflow.com/questions/4028830/nullableint-vs-int-is-there-any-difference) –

答えて

4

これは単にそれぞれのアドレスに対応しています。コンパイラは、あなたが意味するものを知る必要があります。これは、それが修正されています。

var getaccess = (val is int?) & result; 

コンパイラのメッセージは完全に明らかではありませんが、私たちに手がかりを与える:(& resultからである)

CS0214 Pointers and fixed size buffers may only be used in an unsafe 

CS1003 Syntax error, ':' expected 

(これは?から)

:それはあなたが考えている括弧なし

基本的に(それは次のセミコロンの前に: {value if false}表現を期待しているため?からもある)

CS1525 Invalid expression term ';' 

は、意味:

var getaccess = (val is int) ? (&result) 

valでない場合は、表現が不足しているint

関連する問題