エラー「ジェネリック型またはメソッド 'System.Nullable'のパラメーター 'T'として使用するには、型 'string'はnull不可の値型でなければなりません」が表示されるのはなぜですか?
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Universe;
namespace Universe
{
public class clsdictionary
{
private string? m_Word = "";
private string? m_Meaning = "";
string? Word {
get { return m_Word; }
set { m_Word = value; }
}
string? Meaning {
get { return m_Meaning; }
set { m_Meaning = value; }
}
}
}
コードのすべての場所で、string?
の代わりにstring
を使用します。
Nullable<T>
型では、Tがnullを許可しない値型である必要があります(例:int
またはDateTime
)。 string
のような参照型はすでにnullになっている可能性があります。 Nullable<string>
のようなものを許可しても意味がないため、許可されません。
また、C#3.0以降を使用している場合は、 自動実装プロパティ を使用してコードを簡素化できます。
public class WordAndMeaning
{
public string Word { get; set; }
public string Meaning { get; set; }
}
string
は参照型、クラスです。 Nullable<T>
または、int
やGuid
などのnull不可valueタイプのT?
C#構文糖のみを使用できます。
特に、string
は参照型であるため、string
型の式はすでにnullになっている可能性があります。
string lookMaNoText = null;
System.Stringはすでにnull可能です。そのような(string?myStr)が間違っていると宣言する必要はありません。
非常に特殊な理由で、Nullable<int>
と入力して、Nullableにカーソルを合わせてF12を押します-メタデータが理由を提供します(構造体の制約に注意してください):
public struct Nullable<T> where T : struct
{
...
}
8であるC#の今後のバージョンでは、答えが正しくないことに注意してください。
All the reference types are non-nullable by default
そして、あなたは実際に以下を行うことができます:
public string? MyNullableString;
this.MyNullableString = null; //Valid
しかしながら、
public string MyNonNullableString;
this.MyNonNullableString = null; //Not Valid and you'll receive compiler warning.
ここで重要なことは、コードの意図を示すことです。「意図」が参照型がnullになる可能性がある場合は、マークします。警告。