在一行中分配一个首先调用方法的新对象

时间:2014-05-05 08:27:21

标签: c#

我有一些像这样的代码:

SomeObject someObject = new SomeObject();
someObject.Initialize();
this.Object = someObject;

我会(宁可懒洋洋地)喜欢把它写成一行,也许是这样的:

this.Object = new SomeObject() { Initialize(); };

目前C#6.0是可行的还是可能的?或者这只是一个非常糟糕和懒惰的想法?

5 个答案:

答案 0 :(得分:4)

这不是直接可行的,但你可以创建一个小帮手:

public class Helper<T> where T : new()
{
    public static T Init(Action<T> body)
    {
        T obj = new T();
        body(obj);
        return obj;
    }
}

然后:

this.Object = Helper<SomeClass>.Init(obj => obj.Initialize());

或更复杂的案例:

this.Object = Helper<SomeClass>.Init(obj => {
    obj.Initialize();
    obj.SomeOtherMethod();
    ...
});

答案 1 :(得分:1)

你可以这样做:

this.object = (new SomeOjbect()).Initialize();

但您必须通过添加“return this”来编辑initialize()方法

答案 2 :(得分:1)

你可以尝试过,你会发现目前这是不可能的。在我看来,这绝对不是必需的,会降低可读性。你可以做很多其他的事情,比如把它放在你的构造函数中。

除非Initialize方法返回SomeObject,否则您不能像答案之一那样说this.Object = new SomeObject().Initialize();

答案 3 :(得分:1)

正如我在评论中提到的,可以在类构造函数中使用方法:

public class SomeObject 
{
    public SomeObject() 
    {
        Initialize();
    }
    public void Initialize() 
    {
        //do initialization stuff
    }
}

但是,不应该在构造函数中调用虚方法。

更多信息:http://msdn.microsoft.com/en-us/library/ms229060.aspx

答案 4 :(得分:0)

您可以简单地将Intialize()方法放入构造函数中,但是如果这不是您想要的,则可以执行以下操作:

(this.Object = new SomeObject()).Initialize();

工作正常: https://dotnetfiddle.net/QmSBzL