通常我有一个方法,如果出错了,我想返回错误,而不是返回null,我想在运行时更不容易出错,更容易使用。有没有什么已经在.Net中完成的,或者是一个nuget包?也许有一个带可选参数的构造函数或对象初始化器就足够了?
这可能是第一种方法,但每个新的Dto必须具有这些Error属性或从基类继承。
if (condition)
{
return new MyDto(null, error);
}
return new MyDto(someVariable, null);
所以我让这个类使用一个返回类型:
public class Optional<TObject> where TObject : class
{
public Optional(TObject? value)
{
Value = value;
}
public Optional(String error)
{
Error = error;
}
public TObject? Value { get; }
public String Error { get;} = String.Empty;
public Boolean IsError => !String.IsNullOrEmpty(Error);
}
我在方法中返回它:
if (condition)
{
return new Optional(error);
}
return new Optional(new MyDto(someVariable));
然后像这样消耗它:
var result = await myService.GetSomethingAsync();
if(result.IsError)
{
await DisplayAlert("error", result.Error, "Ok");
}
else
{
await DoSomethingElse(result.Value);
}
2条答案
按热度按时间ejk8hzay1#
通过创建一个小的类层次结构,可以确保
Value
属性仅在未发生错误时可用用途
或者通过使用递归模式,我们可以直接将值检索到变量中
请注意,我已经在抽象基类
Result
中声明了Message
属性,因此您不必强制转换为Error
类型来获取消息。我使用
null
作为错误消息的默认值,因为它允许我们写入j9per5c42#
你这推荐的OneOf看起来很有前途,我等下会亲自看看。
我对我的服务所做的是通过使用SvcResult类或继承类来标准化它们返回的结果。
示例:
这是副作用服务调用的类,如果服务返回数据,我从上面派生创建
DataSvcResult
:基本上我就是干这个的不过那个“我的一个”看起来很有趣