3

なぜこのコードは(私のフォームの_Load()イベントで):

FileVersionInfo vi = FileVersionInfo.GetVersionInfo(_fullPath);
String VersionInfo = vi.FileVersion;
if (VersionInfo.Trim().Equals(String.Empty)) {
    VersionInfo = NO_VERSION_INFO_AVAILABLE;
}
textBoxVersionInfo.Text = VersionInfo;

... VersionInfo == ""trueの場合に次のエラーメッセージを教えてください。

System.NullReferenceExceptionが未処理でしたMessage=オブジェクト参照がオブジェクトのインスタンスに設定されていません。*

4

5 に答える 5

7

String.IsNullOrEmptyここでメソッドを使用する必要があります。MSDNを参照してください

if (String.IsNullOrEmpty(VersionInfo)) {
    VersionInfo = NO_VERSION_INFO_AVAILABLE;}
于 2012-04-13T19:53:10.860 に答える
5

さて、私は他の質問に対してばかげた数の反対票を獲得していたので、ここでもそれはより鈍く、気楽な方法ではありません:

  • nullオブジェクトの欠如を表します; と
  • すべての文字列はオブジェクトです; したがって
  • null;である任意の長さの文字列はありません。したがって
  • 空の文字列は決してありませんnull

それだけです、それ以上はありません。スタックトレースを調べたり、デバッガーを接続しnull(空の文字列ではない)どこから来ているのかを調べます。

例外は、expr.somePropertyFieldOrMethodwhereが1exprと評価されるため、Null参照例外を使用した結果です。null

開発者であるあなたの仕事は、他の人が間違っているかもしれないと示唆するものを見るのを待つのではなく、どちらが間違っているかを見つけることです。 そのため、現在存在する唯一の質問であるタイトルの質問に回答した後、これを「ローカライズされすぎている」として閉じます。exprnull

(前の回答と同様に、trueの場合でも、存在するとこの例外が発生する可能性があることに注意しtextBoxVersionInfoてください。他の選択肢は、もちろん、空の文字列を表さないことです。)nullVersionInfo == "" VersionInfo


1技術的には、この例外は任意に発生する可能性があり、おそらく拡張メソッドで正当化されます。ただし、この例外wantonlyを発生させることは、一般的または適切な方法ではなく、.NET Frameworkで見られるため、デバッグ時に一般的に却下される原因です。

于 2012-04-13T19:56:08.360 に答える
2

VersionInfo is NULLtrueの場合、VersionInfo.Trim ()はエラーを返します。

を使用してくださいString.IsNullOrEmpty

VersionInfoがnullの場合は、次のコマンドで確認できます。

if(VersionInfo == null)

また

String.IsNullOrEmpty(VersionInfo)

于 2012-04-13T19:52:58.050 に答える
2

これnullを行うための安全な方法があります:代わりに

VersionInfo.Trim().Equals(String.Empty)

書きます

string.IsNullOrWhiteSpace(VersionInfo)

nullの場合はクラッシュせずVersionInfo、トリミングVersionInfoによって空の文字列が生成された場合はtrueが返されます。

于 2012-04-13T20:00:16.147 に答える
1

私のコメントへのあなたの応答の後、あなたはそれVersionInfoがヌルであることを知っています。Trim()の呼び出しは失敗します。これは、Trim()が等しいかどうかをチェックする前に実行されるためですString.Empty

(string.IsNullOrEmpty(VersionInfo) || VersionInfo.Trim().Length < 1)代わりに(またはstring.IsNullOrWhiteSpace(VersionInfo).NET 4を使用している場合)を使用する必要があります。

編集:

Trim()を削除したが、それでも機能しないという別の回答に対する応答を確認した後、その時点で、Equals呼び出しが機能しなくなります。上記のコードを試してみてください。正常に動作するはずです。

于 2012-04-13T19:57:38.903 に答える