Назначить новый объект, который вызывает метод сначала, в одной строке

У меня есть такой код:

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

Я бы (довольно лениво) хотел написать это в одной строке, возможно, вот так:

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

Возможно, это возможно или возможно запланировано для С# 6.0? Или это просто очень плохая и ленивая идея?

Ответ 1

Это невозможно, но вы можете создать небольшой помощник:

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();
    ...
});

Ответ 2

Вы можете сделать это:

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

но вы должны отредактировать метод initialize(), добавив "return this"

Ответ 3

Вы могли бы попробовать, и вы узнаете, что в настоящее время это невозможно. И, на мой взгляд, это абсолютно не нужно и уменьшало бы удобочитаемость. Вы можете сделать много других вещей, например, поместить его в свой конструктор.

Вы не можете сказать this.Object = new SomeObject().Initialize();, как и один из ответов, если только метод Initialize не возвращает SomeObject.

Ответ 4

Как я уже упоминал в комментариях, в конструкторе класса можно использовать методы:

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

Однако вы не должны вызывать виртуальные методы внутри конструктора.

Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms229060.aspx