Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实例化对象并同时在数组中设置变量_C# - Fatal编程技术网

C# 实例化对象并同时在数组中设置变量

C# 实例化对象并同时在数组中设置变量,c#,C#,我想实例化一个对象并在数组中更改/设置一个变量,代码量很短(为了提高效率),但这不起作用: private ClickBox[] clickBoxes = new ClickBox[] { new ClickBox().OnClick += (@object) => { } }; class ClickBox { public delegate void ClickEvent(Object @object)

我想实例化一个对象并在数组中更改/设置一个变量,代码量很短(为了提高效率),但这不起作用:

    private ClickBox[] clickBoxes = new ClickBox[]
    {
        new ClickBox().OnClick += (@object) =>
        {

        }
    };

class ClickBox
{
    public delegate void ClickEvent(Object @object);

    private ClickEvent clickEvent;

    public ClickEvent OnClick
    {
        get { return clickEvent; }
        set { clickEvent = value; }
    }
}
在这段代码中,有人知道返回对象而不是变量的方法吗?我知道在创建数组之后设置ClickEvent是可行的,但是对于大量项目来说,这将是非常低效的


谢谢。

您真的应该编写一个生成器方法来实现这一点

一些非常简单的事情可能是这样的:

static ClickBox createClickBox(Action<ClickBox> subscribe)
{
    var result = new ClickBox();
    subscribe(result);
    return result;
}
但我必须同意其他人的说法,他们说这有点代码味道——尽管没有更多关于您真正打算如何使用它的上下文,很难确定


另外,在谈到效率时:我假设您是在谈论减少代码行数,而不是性能。

使用生成器模式。这气味。你所说的“高效”到底是什么意思?代码行的数量大部分与执行速度无关。集合或对象初始值设定项只是语法上的糖类,但执行相同的操作(设置属性,调用
Add()
等)编译时。如果您经常需要在构建对象后立即执行相同的操作,为什么不创建一个实际执行所需操作的构造函数?以及为什么要添加一个不执行任何操作的单击事件?不,您不能在对象初始值设定项内连接事件。您可以为初始值设定项主体中的属性赋值,然后在创建对象后连接事件。谢谢!你说得对,我说的是代码行,下次我会尽量记得更清楚。为那些感到困惑的人感到抱歉。
readonly ClickBox[] clickBoxes =
{
    createClickBox(cb => cb.OnClick += o => { /* Code 1 */ }),
    createClickBox(cb => cb.OnClick += o => { /* Code 2 */ })
};