135
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

4

5 に答える 5

303

System.Stringは参照型であり、すでに「null許容」です。

Nullable <T>と?サフィックスは、Int32、Double、DateTimeなどの値タイプ用です。

于 2008-10-09T14:05:47.120 に答える
39

あなたはそれを複雑にしています。stringすでにnull許容です。null許容型にする必要はありません。?プロパティタイプを取り出します。

于 2008-10-09T14:06:30.457 に答える
19

stringは値型ではないため、stringをNullableのパラメーターにすることはできません。文字列は参照型です。

string s = null; 

は非常に有効なステートメントであり、null許容にする必要はありません。

private string typeOfContract
    {
      get { return ViewState["typeOfContract"] as string; }
      set { ViewState["typeOfContract"] = value; }
    }

asキーワードのために機能するはずです。

于 2008-10-09T14:08:13.603 に答える
13

文字列は参照型であるため、ここで使用する必要はありません(使用できません)Nullable<T>。typeOfContractを文字列として宣言し、クエリ文字列から取得した後にnullをチェックするだけです。または、nullと同じ空の文字列値を処理する場合は、String.IsNullOrEmptyを使用します。

于 2008-10-09T14:08:17.443 に答える
4

nullable の場合、文字列を除く?すべてのC# プリミティブで使用します。

次のページでは、 C# プリミティブの一覧を示しています。 http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx

于 2012-05-16T13:51:19.223 に答える