用括号初始化的值会覆盖在C#构造函数中设置的值吗? [重复]

问题描述 投票:-1回答:2

有人可以解释一下,如果在创建新类的代码中启动了初始列表,那么我将如何在C#类构造函数中添加GENERATED通知。 Notifications = notificationsPASSEDList是否仅在构造函数之后运行?

//.. get list of notifications to pass
var myClass = new MyClass { Notifications = notificationsPASSEDList }

public class MyClass {

    public List<NotificationsClass> Notifications;

    public MyClass () {
        // .. get list of generated notifications
        Notifications.AddRange(notificationsGENERATEDList)
    }

}
c# public
2个回答
0
投票

可以按照您的要求做,但这不是一个好主意,因为您必须修改Notifications属性,以便为其分配分配执行添加操作而不是分配,这是非常规且令人困惑的。但是,你去了:

public class MyClass {

    public List<NotificationsClass> _notifications;

    public MyClass()
    {
        _notifications = notificationsGENERATEDList;
    }

    public Notifications
    {
        get { return _notifications; }
        set { _notifications.AddRange(value); }
    }
}

一种更好的方法是在构造函数中传递PASSEDlist,而不是使用初始化语法:

public class MyClass {

    public List<NotificationsClass> Notifications;

    public MyClass(List<NotificationClass> passedList)
    {
        Notifications = notificationsGENERATEDList;
        Notifications.Add(passedList);
    }
}

然后使用:

var myClass = new MyClass( notificationsPASSEDList);

0
投票

嗯,当设置属性时,您可以检查列表中是否存在任何内容(肯定已添加到构造函数中)并保存它们:

    private generated = null;
    private List<NotificationsClass> notifications;
    public List<NotificationsClass> Notifications 
    {
        get 
        {
             return notifications;
        }
        set
        {
            if(generated != null)
            {
                notifications = generated ;
                notifications.AddRange(value);
                generated = null
             }
             else
                notifications = value;
        }

    }

public MyClass () {
        generated = notificationsGENERATEDList;
    }

请注意,private guaranteed = null;行可能看起来很多余,但是可以确保并非总是分配列表实际上会将其附加到列表中,并且仅在有保证的列表时才添加。否则,将其分配。

如果要始终保留保证清单,则可以更改代码的这一部分:

if(guaranteed != null)
{
    notifications = generated ;
    notifications.AddRange(value);
    generated = null;
}
else
    notifications = value;

对此:

if(generated != null)
{
     notifications = generated;
     notifications.AddRange(value);
}
else
    notifications = value;
© www.soinside.com 2019 - 2024. All rights reserved.