如何解决可为空的 getter,但不可为空的 setter
使用 c#
8.0 版引入的可为空引用类型和不可为空引用类型,我可以执行以下操作:
public class Response
{
public Response(Exception? ex)
{
_ex = ex;
}
private Exception? _ex;
public Exception? Ex
{
get => _ex;
set { _ex = value; }
}
}
我可以通过构造函数将 _ex
初始化为 null
。但是,一旦创建了实例,我希望 setter 无法将 Ex
值设置为 null
(通过从类型中删除问号)......类似于下面的代码,哪个当然,不编译。
public class Response
{
public Response(Exception? ex)
{
_ex = ex;
}
private Exception? _ex;
public Exception? Ex
{
get => _ex;
}
public Exception Ex
{
set { _ex = value; }
}
}
当然,一种解决方法是使用方法而不是 setter 设置 _ex
值,但我还是想问问。
解决方法
试试这个
public class Response
{
public Response(Exception? ex)
{
_ex = ex;
}
private Exception? _ex;
public Exception? Ex
{
get => _ex;
set {
if ( _ex!=null && value==null ) throw exeption; // or just ignore maybe
else _ex = value;
}
}
}
如果 Exeption 是引用类型,并且 C# 版本也允许引用类型为 null,这也是正确的代码
public class Response
{
public Response(Exception ex)
{
_ex = ex;
}
private Exception _ex;
public Exception Ex
{
get => _ex;
set {
if ( _ex!=null && value==null ) throw exeption; // or just ignore maybe
else _ex = value;
}
}
}
此代码最重要的部分不允许设置 null,如果它已经不是 null。 @golakwer 代码没有这部分:
if ( _ex!=null && value==null ) throw exeption; // or just ignore maybe
else _ex = value;
,
如果在可为空的变量后添加 !,编译器允许您将不可为空的变量分配给可为空的变量。
这样 Ex 属性可以是不可为空的,但在构造函数中可以分配一个可以为空的值。
public class Response
{
public Response(Exception? ex)
{
_ex = ex!;
}
private Exception _ex;
public Exception Ex
{
get => _ex;
set { _ex = value; }
}
}
Further 阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。