private string? typeOfContract
{
get { return (string?)ViewState["typeOfContract"]; }
set { ViewState["typeOfContract"] = value; }
}
後のコードでは、次のように使用します。
typeOfContract = Request.QueryString["type"];
typeOfContract
行の宣言で次のエラーが表示されます。
型 'string'は、ジェネリック型またはメソッド 'System.Nullable <T>'のパラメーター 'T'として使用するために、null不可の値型である必要があります
何か案は?基本的に、アクションを実行する前に、"type"
がQueryString
に存在することを確認します。
System.Stringは参照型であり、すでに「null可能」です。
Nullable <T>および?接尾辞は、Int32、Double、DateTimeなどの値タイプ用です。
あなたはそれを複雑にしています。 string
はすでにヌル可能です。 more nullableにする必要はありません。プロパティタイプの?
を取り出します。
stringは値型ではないため、stringをNullableのパラメーターにすることはできません。文字列は参照型です。
string s = null;
は非常に有効なステートメントであり、null可能にする必要はありません。
private string typeOfContract
{
get { return ViewState["typeOfContract"] as string; }
set { ViewState["typeOfContract"] = value; }
}
asキーワードにより動作するはずです。
文字列は参照型なので、ここでNullable<T>
を使用する必要はありません(使用できません)。 typeOfContractを文字列として宣言し、クエリ文字列から取得した後にnullをチェックするだけです。または、nullと同じ空の文字列値を処理する場合は、String.IsNullOrEmptyを使用します。
ヌル可能の場合、文字列を除くすべてのC#プリミティブで?
を使用します。
次のページに、C#プリミティブのリストを示します。 http://msdn.Microsoft.com/en-us/library/aa711900 (v = vs.71).aspx
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になる可能性がある場合は、マークします。警告。
すべての回答を削除しているモデレーターには、しないでください。私は、この答えが価値を高め、削除すると、誰かがその時点で何が正しいかを知らないようにするだけだと強く信じています。すべての回答を削除したため、ここに回答を再投稿しています。 「重複」に関して送られたリンクは、単に一部の人々の始まりであり、公式の推奨事項ではないと思います。