gpt4 book ai didi

c# - 可选的设计模式,优势

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

<分区>

因此,众所周知,臭名昭著的 NullReferenceException是软件产品中最常见的异常(exception)。我一直在阅读一些文章,发现自己采用了可选方法。

它的目标是围绕可为空的值创建某种封装

public sealed class Optional<T> where T : class {

private T value;

private Optional(T value) {
this.value = value;
}

//Used to create an empty container
public static Optional<T> Empty() {
return new Optional(null);
}

//Used to create a container with a non-null value
public static Optional<T> For(T value) {
return new Optional(value);
}

//Used to check if the container holds a non-null value
public bool IsPresent {
get { return value != null; }
}

//Retrieves the non-null value
public T Value {
get { return value; }
}
}

之后,可以像这样返回现在的可选值:

public Optional<ICustomer> FindCustomerByName(string name)
{
ICustomer customer = null;

// Code to find the customer in database

if(customer != null) {
return Optional.Of(customer);
} else {
return Optional.Empty();
}
}

然后这样处理:

Optional<ICustomer> optionalCustomer = repository.FindCustomerByName("Matt");

if(optionalCustomer.IsPresent) {
ICustomer foundCustomer = optionalCustomer.Value;
Console.WriteLine("Customer found: " + customer.ToString());
} else {
Console.WriteLine("Customer not found");
}

我没有看到任何改进,只是改变了复杂性。程序员必须记住检查值是否为 IsPresent , 以同样的方式他必须记住检查是否 value != null .

如果他忘记了,他会得到一个 NullReferenceException两种方法。

我错过了什么? Optional 模式比 Nullable<T> 有什么优势(如果有的话)和空合并运算符?

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