Назначить новый объект, который вызывает метод сначала, в одной строке
У меня есть такой код:
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