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