2

int プロパティまたは DateTime プロパティで GetType を呼び出すと、期待どおりの結果が得られますが、文字列プロパティでは NullReferenceException (?) が返されます。

private int      PropInt    { get; set; }
private DateTime PropDate   { get; set; }
private string   propString { get; set; }

WriteLine(PropInt.GetType().ToString());    // Result : System.Int32
WriteLine(PropDate.GetType().ToString());   // Result : System.DateTime
WriteLine(propString.GetType().ToString()); // Result : NullReferenceException (?!)

誰か説明できますか?string-prop と int-prop の違いは何ですか?

4

4 に答える 4

8

プロパティの値が の場合、などのnullオブジェクト メソッドまたはプロパティにアクセスしようとすると、NullReferenceException が発生しますGetType()intやのようなプリミティブ型DateTimeは値型であるため、null値を保持できないため、GetType()他のメンバー関数よりも失敗することはありません。

于 2009-10-09T13:42:13.243 に答える
2

他の答えが示していることを強調するには、intをintに変更しますか?およびDateTimeからDateTimeへ?コードをもう一度実行してみてください。これらの値はnullを保持できるようになったため、同じ例外が発生します。

于 2009-10-09T13:48:57.817 に答える
2

string は参照型であり、他の型はそうではないためです。DateTime と Int はデフォルトで値を持つ必要があり、null にすることはできません。

理解しなければならないのは、情報を格納するための変数をコンパイラが作成していることです。C# 3.0 では明示的に宣言する必要はありませんが、まだ存在しているため、DateTime 変数と int 変数を作成し、コンパイラ エラーが発生しないようにデフォルト値に初期化しています。文字列の場合は、参照型であるため、これを行う (既定値を初期化する) 必要はありません。

于 2009-10-09T13:42:18.313 に答える
1

propString の初期値は null です。nullのメソッドは実行できません。propString: propString = "" を初期化すると、例外なしで GetType() を実行できます

例外のないコード:

private int      PropInt    { get; set; }
private DateTime PropDate   { get; set; }
private string   propString { get; set; }

propString = ""; // propString != null

WriteLine(PropInt.GetType().ToString());    // Result : System.Int32
WriteLine(PropDate.GetType().ToString());   // Result : System.DateTime
WriteLine(propString.GetType().ToString()); // Result : System.String
于 2009-10-09T13:47:16.450 に答える