[解決済み] return myVarとreturn (myVar)は違うのですか?
質問
C#のサンプルコードを見ていて、ある例がreturnを()で囲んでいることに気づきました。
私はいつもそうしてきただけです。
return myRV;
している違いはあるのでしょうか。
return (myRV);
どのように解決するのですか?
UPDATE: この質問は のブログの主題でした。 . 面白い質問をありがとうございました。
実際には、違いはありません。
で 理論上 には違いがあるかもしれません。C# の仕様には、この違いが生じる可能性のある興味深いポイントが 3 つあります。
まず、無名関数のデリゲート型と式木への変換です。次のように考えてみましょう。
Func<int> F1() { return ()=>1; }
Func<int> F2() { return (()=>1); }
F1
は明らかに合法です。これは
F2
? 技術的にはノーです。
仕様が
からの変換があることを 6.5 節で述べています。
ラムダ式
から互換性のあるデリゲート型への変換があると書かれています。というのは
ラムダ式
? いいえ、これは
括弧で囲まれた式
を含んでおり
ラムダ式
.
Visual C#コンパイラはここで小さな仕様違反を犯し、あなたの代わりに括弧を破棄してくれます。
2つ目です。
int M() { return 1; }
Func<int> F3() { return M; }
Func<int> F4() { return (M); }
F3
は合法です。は
F4
? いいえ。セクション 7.5.3 では、括弧で囲まれた式はメソッドグループを含んではいけないと述べています。ここでも便宜上、仕様に違反し、変換を許可しています。
3番目です。
enum E { None }
E F5() { return 0; }
E F6() { return (0); }
F5
は合法です。は
F6
? いいえ。仕様では、リテラルゼロから任意の列挙型への変換が存在するとされています。
(0)
はリテラルゼロではなく、括弧の後にリテラルゼロが続き、さらに括弧が続いています。ここでは仕様に違反し、実際には任意の
ゼロに等しいコンパイル時の定数式
であり、リテラル ゼロだけではありません。
つまり、どのような場合でも、技術的にはそうすることが違法であるにもかかわらず、それを逃れることを許可しているのです。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] 複数の例外を一度にキャッチする?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] SelectとSelectManyの違い
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】文字列が有効な DateTime " format dd/MM/yyyy " として認識されなかった。
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み] 2つのリストを結合する
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み] なぜ、(j++);という記述が禁じられたのですか?
-
[解決済み] returnとreturn()の違いは何ですか?