[英]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 default
, 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.
这里重要的是显示代码的意图。 如果“意图”是引用类型可以为空,则对其进行标记,否则将空值分配给不可为空会导致编译器警告。
对于正在删除所有答案的版主,请不要这样做。 我坚信这个答案会增加价值,而删除只会让某人不知道当时什么是正确的。 由于您已删除所有答案,因此我将在此处重新发布答案。 发送的关于“重复”的链接只是一些人的开场白,我认为这不是官方推荐。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.