繁体   English   中英

C#可为空的字符串错误

[英]C# nullable string error

private string? typeOfContract
{
  get { return (string?)ViewState["typeOfContract"]; }
  set { ViewState["typeOfContract"] = value; }
}

稍后在代码中我像这样使用它:

typeOfContract = Request.QueryString["type"];

我在typeOfContract行的声明中收到以下错误:

类型“字符串”必须是不可为空的值类型,以便将其用作泛型类型或方法“System.Nullable<T>”中的参数“T”

有任何想法吗? 基本上,我想在执行操作之前确保QueryString存在"type"

System.String 是一种引用类型并且已经“可为空”。

Nullable<T> 和 ? 后缀用于值类型,例如 Int32、Double、DateTime 等。

你让它变得复杂。 string已经可以为空。 你不需要让它可空。 取出? 在属性类型上。

string 不能作为 Nullable 的参数,因为 string 不是值类型。 字符串是一种引用类型。

string s = 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 defaultAll 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. 

这里重要的是显示代码的意图。 如果“意图”是引用类型可以为空,则对其进行标记,否则将空值分配给不可为空会导致编译器警告。

更多信息

对于正在删除所有答案的版主,请不要这样做。 我坚信这个答案会增加价值,而删除只会让某人不知道当时什么是正确的。 由于您已删除所有答案,因此我将在此处重新发布答案。 发送的关于“重复”的链接只是一些人的开场白,我认为这不是官方推荐。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM