2012-02-01 11 views
4

の.NET WebアプリケーションのWebフォームでのプログラム全体:使用されることはありません割り当てられた値、、ないコンパイラのメッセージ

namespace WebApplication1 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string x = ""; 
     string y = String.Empty; 
    } 
    } 
} 

私はアプリケーションをビルドする場合、コンパイラはXを強調し、

変数xはに割り当てられたが、it's値をyについて

を使用されることはありません、私は下線を得ることはありません。何故なの? (VS 2008、.NET 3.5)

+1

[C#コンパイラは警告する必要がありますが、それはできませんか?](http://stackoverflow.com/questions/2740885/c-sharp-compiler-should-give-warning-but-doesnt) –

答えて

9

私はここでは詳細にあなたの質問に答える:

https://stackoverflow.com/a/2741281/88656

簡単に説明する:コンパイラは、ローカルのに書かれたが、フロー解析パス中に読み込まれていないことを検知します。ローカルに書き込まれた値が非定数の場合、意図的に警告を抑止します。 String.Emptyは定数ではなく、奇妙なことに読み取り専用のフィールドです。しかし、空の文字列リテラルは、定数がです。そういうわけで、文字通りのものには警告が表示されますが、フィールドには警告は表示されません。

コンパイラは、プログラムのデバッグを容易にするために、未読-からローカルに式の値を代入される可能性があります推論です。デバッグに役立つ説明変数を導入するたびに、「警告はエラーです」という警告を消す必要はありません。この場合、明らかに、変数を使用してString.Emptyの出力を調べていないということは、コンパイラでは失われています。フィールドリファレンスのセマンティクスが何であるかはわかりません。

+0

"String.Emptyは定数ではなく、読み込み専用のフィールドです。奇妙なことに、これは設計上の決定か間違いですか? –

+1

@lukas:これはQ&Aサイトです。質問がある場合は、質問を投稿してください!しかし、この場合、すでに何回も投稿されています。 http://stackoverflow.com/questions/507923/why-isnt-string-empty-a-constant –

+0

デバッグを容易にするために、変数を使用する理由は何ですか?私は個人的に、String.Emptyのように、プログラムをはるかに読みやすくするためです。そして、これは非常に頻繁に起こるので、私はさらに未使用の変数の警告を得るのが好きです。 – AGuyCalledGerald

5

コンパイラは、xを強調し、

はありません、コンパイラはしていません。エディタは下線を引いています。コンパイラには、線を描画できる出力チャネルはありません。

yの場合、下線は表示されません。何故なの?

これは使用されていますか?

私は間違ってはいませんが、可変スコープで関連する完全なコードがなければ、これがそうであるかどうかは分かりません。

プログラム全体:

嘘。これはプログラム全体ではありません;)完全なクラスではありません。そして、クラス外のC#では変数を持つことはできません。

+0

プログラム全体私は書きました;) – AGuyCalledGerald

+1

@ Jan-FrederikCarl:確かにコンパイルされたプログラム全体ではありません。短いが完全なプログラムは間違いなく助けになるだろう。 –

+3

Re:「エディタには下線が引かれています」 - これはヘア分割の区別です。 **コンパイラはエディタに**に下線を付けるよう指示します。いいえ、エディタが下線を引いていない、Windowsのグラフィックスルーチンが下線を引いている、いいえ、アンダーラインをしていない、モニター上のピクセルが下線を引いているといいかもしれません。 –

-2

私は正しく読ん記事を理解している場合、コンパイラは読み取り専用フィールドであるため、String.Emptyのが何であるかを知りません。 String.Emptyは実行時に割り当てられます。だから私はプログラムを構築する際に警告を受けません。

The article

+0

何か間違っていますか? – AGuyCalledGerald

+1

あなたが言ったことは本当ですが、あなたの質問に本当の答えを与えることができません。あなたは '' ''から '' String.Empty'を区別しましたが、エラーは* "'変数 'y'は割り当てられていますが、その値は決して使用されません.' "が適用されます。 http://stackoverflow.com/a/2741281を参照してください。 – Brian

関連する問題