什么时候在 C# 中返回空引用类型是正确的 [重复]
Posted
技术标签:
【中文标题】什么时候在 C# 中返回空引用类型是正确的 [重复]【英文标题】:When is it correct to return a null reference type in C# [duplicate] 【发布时间】:2017-11-13 15:48:37 【问题描述】:我有一个预期会返回一个对象的 C# 方法。如果这个方法不抛出任何异常,我会更喜欢。
我的问题是,是否可以让方法返回 null 并因此将 null 检查责任交给调用方而无需进一步警告?
被调用者是否应该仅仅因为它是一个引用类型而假设该对象可能为空? (并且引用类型的默认值为 null: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/null)
请看下面我的例子
// this method is expected to return an object
public MyClass getObject()
MyClass myObject = null;
// Another option would be to initialize to a new instance, calling the default constructor and not setting any properties
// MyClass myObject = new MyClass(); // no null check needed by the caller, but it is a pretty useless object
try
// just as an example
myObject = new MyClass();
catch (Exception e)
Console.WriteLine(e.Message);
return myObject; // will return null when and exception occured
public class MyClass
public int id get; set;
public string name get; set;
【问题讨论】:
我不相信对此有正确或错误的答案,只要您在检查之前保持一致并评论为什么该值可能为空。 Should a retrieval method return 'null' or throw an exception when it can't produce the return value?的可能重复 【参考方案1】:是的,你可以返回null
,就像你当前正在做的那样,在这种情况下,调用者有责任在尝试访问对象的任何属性之前检查是否为空。使用 C# 6 语法
muobject?.Age
每个模式你可以使用Null Object Pattern
;在这种情况下,您返回一个空对象而不是返回null
。因此,即使调用者出错,它也不会被NullRefException
炸毁。出于验证目的,您可以检查属性值,例如 if(string.IsNullOrEmpty(myobject.name)) ....
【讨论】:
他当然可以,但他问是否最好返回 null 或更好地抛出异常/返回一个默认对象。如果他记录了行为并且与类似的方法一致,那么任何方法都可以。以上是关于什么时候在 C# 中返回空引用类型是正确的 [重复]的主要内容,如果未能解决你的问题,请参考以下文章