0

我是 Java 程序员,我是 C# 新手,我真的不明白为什么需要 Nullable 类型。任何人都可以解释我吗?例如我有代码:

 XmlReader xr=...
 string propertyValue=xr.GetAttribute("SomeProperty");
 if(propertyValue!=null) {
 //some code here
}

propertyValue 类型是“字符串”而不是“字符串?” 但“GetAttribute”可以返回 null。所以,事实上,我应该为每个变量检查​​它的值是否为空,那么为什么可以为空类型'*?一般是需要的。它如何有用?

第二个问题:如何编写我自己的返回类型为“字符串”的方法并从中返回空值?

4

3 回答 3

1

你可以有返回类型 asstring和 return null,因为string 是一个引用类型,它也可以持有null

public string SomeMethod()
{
    return null;
}

propertyValue 类型是“字符串”而不是“字符串?”

数据类型 with?Nullable<T>仅适用于值类型的数据类型,因为 string 是您不能拥有的引用类型string??只是语法糖。

在 C# 和 Visual Basic 中,您可以使用 ? 将值类型标记为可为空的。值类型后的符号。

您可能还会看到:值类型和引用类型

于 2013-09-24T14:17:06.053 回答
1

Nullable<T>类型用于structs。这些有点类似于 Java 的原语(例如它们不能为空),但更强大和灵活(例如,用户可以创建自己的struct类型,并且您可以在它们上调用类似的方法ToString())。

当您想要一个可为空的struct(“值类型”)时,请使用Nullable<T>(或相同的T?)。classes(“引用类型”)总是可以为空的,就像在 Java 中一样。

例如

//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;
}
于 2013-09-24T14:18:49.070 回答
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();

于 2013-09-24T14:17:36.540 回答