我有一些像这样的代码:
SomeObject someObject = new SomeObject();
someObject.Initialize();
this.Object = someObject;
我会(宁可懒洋洋地)喜欢把它写成一行,也许是这样的:
this.Object = new SomeObject() { Initialize(); };
目前C#6.0是可行的还是可能的?或者这只是一个非常糟糕和懒惰的想法?
答案 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
}
}
但是,不应该在构造函数中调用虚方法。
答案 4 :(得分:0)
您可以简单地将Intialize()方法放入构造函数中,但是如果这不是您想要的,则可以执行以下操作:
(this.Object = new SomeObject()).Initialize();