gpt4 book ai didi

c# - 强制方法不返回 null

转载 作者:行者123 更新时间:2023-11-30 20:27:51 27 4
gpt4 key购买 nike

如题Here 8 年前,但我认为应该有一种方法(新模式、新设计、新架构或其他任何东西。)强制方法不返回 null。

如您所知,在一个对我来说很重要的方法中返回 null 有一些含义:

在消费端处理 null 和可理解的语义,例如:

方法:

public ClassName Do()
{
...
return null;
}

然后像这样调用Do()(注意评论也一样):

var objVal = Do(); 
//Accessing property of ClassName raised exception
var pnVal = objVal.PropName;//Exception id objVal is null

//But I should handle if it is not null then do anything I want
if(objVal!= null)
{
//Do something
}

在通过上述方式在产品上遇到许多问题后,我得出了这个结论,将所有方法概括为遵循一种模式,使其可读、清晰并防止语义歧义。

所以一个非常基本的方法是使用 Struct 类型,因为 structure 不能为 null ,如果方法的返回类型是 structure 那么它们就不能返回 null 我们在 中知道这一点编译时不在运行时。

所以我像这样实现上面的方法:

1- 为方法创建 DTO outin,在本例中只是 out:

public struct Do_DTO_Out
{
public ClassName Prop1 { get; set; }
public bool IsEmpty
{
get
{
return Prop1 == null;
}
}

public static Do_DTO_Out Empty
{
get
{
return new Do_DTO_Out() { Prop1 = null };
}
}
}

2- Do 方法应该是:

public Do_DTO_Out Do()
{
try
{
return manipulatedObj;
}
catch (Exception exp)
{

}
return Do_DTO_Out.Empty;
}

3- 在消费端:

var objVal = Do();
if (!objVal.IsEmpty)
//Do something

struct 是最好的方法吗?是否值得更改所有方法并为每个方法创建 DTO inout(我认为是这样)。

有没有更好的方法来做到这一点,任何想法、帮助、答案都将不胜感激。

最佳答案

你的“引用类型”到“带属性检查的结构”转换对我来说似乎毫无用处。它还需要深入了解您的意图,而引用类型 null 检查对于任何稍后阅读它的人来说都是显而易见的。

我认为code contracts可以为你工作。它为您提供编译时静态分析和运行时检查。只要确保您有适当的契约(Contract)作为发布条件:

public ClassName Do()
{
...

object returnValue = null;

Contract.Ensures(returnValue != null);

return returnValue;
}

关于c# - 强制方法不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183312/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com