4

null 許容文字列を定義しようとするとエラーが発生するクラス (filehelpers によって使用される) があります。

public String? ItemNum;

エラーは次のとおりです。

 Error  1   The type 'string' must be a non-nullable value type in order 
 to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'

これは小文字stringでも発生しますが、それらの違いはまだ見ていません。

int、decimal などの別の型を使用しても問題ありません。

public decimal? ItemNum;

フィールドなどでコンストラクターを定義することについてネットで一般的に見ている人もいますが、他のフィールドが正常に機能することを考えると、文字列の何が特別なのでしょうか? それを回避するエレガントな方法はありますか?

4

1 に答える 1

14

stringは参照型であり、参照型はその性質上 null 許容です。

を定義するpublic string ItemNumと、すでに nullable になっています。

Nullable構造体が追加され、値の型もヌル可能にできるようになりました。

を宣言するpublic decimal? ItemNumと、 と同等になりpublic Nullable<decimal> ItemNumます。

Nullable構造体には定義があります:

public struct Nullable<T> where T : struct, new()

where T : structTは値型のみであることを意味します。

MSDN の説明は非常に詳細なNullable Structureです。

見積もり:

たとえば、String などの参照型は null 許容ですが、Int32 などの値型はそうではありません。値型は、その型に適切な値のみを表現するのに十分な容量があるため、null 許容にすることはできません。null の値を表現するために必要な追加容量がありません。

于 2011-06-16T03:35:18.203 に答える