如何从方法返回null

时间:2013-09-24 14:14:54

标签: c# nullable

我是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值?

3 个答案:

答案 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>类型用于structs。这些有些类似于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();