属性 的赋值(如果不为空)是否可以使用空合并?
Assignment of property if not null, possible with null-coalecing?
我正在尝试做类似的事情
我正在尝试将 属性 分配给一个对象(如果该对象不为空)。
但非空调用的标准形式不适用于这样的赋值
socket?.Blocking = false
我想做的是尽可能缩短它:
if(socket != null) socket.Blocking = false
我认为唯一的方法是使用扩展方法,所以你可以这样写:
socket?.SetBlocking(false);
您可以像这样创建扩展方法:
public static class SocketExtensions
{
public static void SetBlocking(this Socket socket, bool blocking)
{
if (socket != null) socket.Blocking = blocking;
}
}
这将是一个很棒的功能
b?.c = "bob"
不过,它在复合作业方面存在缺陷。考虑这个
a.b?.c = "bob"
它应该在 null
上做什么?
个人认为应该忽略parents。但是,唉, 的权力 可能 做出了正确的决定,因为与 的其他用例不一致空条件.
注意:您可以推出自己的扩展方法,尽管它不是很令人满意,并且可能会因为抽象性和可读性而无法通过我的代码审查。
a?b.NullConditional(x => x.c = "bob");
你还剩下
if(a?.b != null) a.b.c = "bob"
或者你的情况
if(socket != null) socket.Blocking = false
或为此用例编写专用扩展方法。
我正在尝试做类似的事情
我正在尝试将 属性 分配给一个对象(如果该对象不为空)。 但非空调用的标准形式不适用于这样的赋值
socket?.Blocking = false
我想做的是尽可能缩短它:
if(socket != null) socket.Blocking = false
我认为唯一的方法是使用扩展方法,所以你可以这样写:
socket?.SetBlocking(false);
您可以像这样创建扩展方法:
public static class SocketExtensions
{
public static void SetBlocking(this Socket socket, bool blocking)
{
if (socket != null) socket.Blocking = blocking;
}
}
这将是一个很棒的功能
b?.c = "bob"
不过,它在复合作业方面存在缺陷。考虑这个
a.b?.c = "bob"
它应该在 null
上做什么?
个人认为应该忽略parents。但是,唉, 的权力 可能 做出了正确的决定,因为与 的其他用例不一致空条件.
注意:您可以推出自己的扩展方法,尽管它不是很令人满意,并且可能会因为抽象性和可读性而无法通过我的代码审查。
a?b.NullConditional(x => x.c = "bob");
你还剩下
if(a?.b != null) a.b.c = "bob"
或者你的情况
if(socket != null) socket.Blocking = false
或为此用例编写专用扩展方法。