代码之家  ›  专栏  ›  技术社区  ›  Mike Fielden

C#可为空字符串错误

  •  136
  • Mike Fielden  · 技术社区  · 16 年前
    private string? typeOfContract
    {
      get { return (string?)ViewState["typeOfContract"]; }
      set { ViewState["typeOfContract"] = value; }
    }
    

    在后面的代码中,我会这样使用它:

    typeOfContract = Request.QueryString["type"];
    

    typeOfContract 行说明:

    类型“string”必须是不可为null的值类型才能使用 它将作为泛型类型或方法中的参数“T”进行设置

    有什么想法吗?基本上,我想确保 "type" QueryString

    5 回复  |  直到 7 年前
        1
  •  303
  •   to StackOverflow    14 年前

    String是一种引用类型,并且已经可以为“null”。

        2
  •  39
  •   jop    16 年前

    你把事情弄复杂了。 string 已可为空。你不需要做到 可为空。取出 ? 在属性类型上。

        3
  •  19
  •   Szymon Rozga    16 年前

    字符串不能是可为null的参数,因为字符串不是值类型。字符串是引用类型。

    string s = null; 
    

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

    应该工作,因为 关键词。

        4
  •  13
  •   csgero    16 年前

    Nullable<T>

        5
  •  4
  •   g t Omri Btian    10 年前

    对于nullable,使用 ? ,字符串除外。

    下一页列出了 : http://msdn.microsoft.com/en-us/library/aa711900(v=vs.71).aspx

        6
  •  2
  •   ANewGuyInTown    6 年前

    请注意,在即将发布的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. 
    

    这里重要的是显示代码的意图。

    More info