我是java程序员,我是C#的新手,我真的不明白为什么需要Nullable类型。任何人都可以解释一下吗? 例如,我有代码:
XmlReader xr=...
string propertyValue=xr.GetAttribute("SomeProperty");
if(propertyValue!=null) {
//some code here
}
propertyValue类型是'string'而不是'string?'但'GetAttribute'可以返回null。 所以,事实上,我应该为每个变量检查它的值是否为null,那么为什么可以为nullable类型'*?'一般来说是需要的。 它有用吗?
第二个问题: 如何用返回类型'string'编写我自己的方法并从中返回null值?
答案 0 :(得分:1)
您可以将返回类型设为string
并返回null
,因为字符串是引用类型,它也可以包含null
。
public string SomeMethod()
{
return null;
}
propertyValue类型是'string'而不是'string?'
?
的数据类型是Nullable<T>
数据类型,仅适用于值类型,因为字符串是您不能拥有string?
的引用类型。 ?
只是语法糖。
在C#和Visual Basic中,使用。将值类型标记为可为空 ?值类型后的表示法。
您可能还会看到:Value Types and Reference Types
答案 1 :(得分:1)
Nullable<T>
类型用于struct
s。这些有些类似于Java的原语(例如它们不能为空),但更强大和灵活(例如,用户可以创建自己的struct
类型,并且可以在它们上调用ToString()
之类的方法)。
如果您想要可以为struct
(“值类型”),请使用Nullable<T>
(或相同的T?
)。 class
es(“引用类型”)总是可以为空,就像在Java中一样。
E.g。
//non-nullable int
int MyMethod1()
{
return 0;
}
//nullable int
int? MyMethod2()
{
return null;
}
//nullable string (there's no such thing as a non-nullable string)
string MyMethod3()
{
return null;
}
答案 2 :(得分:0)
回答上一个问题:
很长的路:
private string MethodReturnsString()
{
string str1 = "this is a string";
return str1;
}
简短的方法:
private string MethodReturnsString()
{
return "this is a string";
}
str1填充:"this is a string"
,将返回到调用它的方法。
请按以下方式调用此方法:
string returnedString;
returnedString = MethodReturnsString();
returnedString
将填充"this is a string"
MethodReturnsString();