属性 的赋值(如果不为空)是否可以使用空合并?

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

或为此用例编写专用扩展方法。