C# 在一行中指定一个首先调用方法的新对象

C# 在一行中指定一个首先调用方法的新对象,c#,C#,我有一些这样的代码: SomeObject someObject = new SomeObject(); someObject.Initialize(); this.Object = someObject; this.Object = new SomeObject() { Initialize(); }; 我(相当懒)想把它写在一行,也许是这样: SomeObject someObject = new SomeObject(); someObject.Initialize(); this.O

我有一些这样的代码:

SomeObject someObject = new SomeObject();
someObject.Initialize();
this.Object = someObject;
this.Object = new SomeObject() { Initialize(); };
我(相当懒)想把它写在一行,也许是这样:

SomeObject someObject = new SomeObject();
someObject.Initialize();
this.Object = someObject;
this.Object = new SomeObject() { Initialize(); };
这在C#6.0中是可能的还是计划的?或者这只是一个非常糟糕和懒惰的想法?

你可以这样做:

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

但是您必须通过添加“returnthis”来编辑initialize()方法。您可以尝试一下,但您会发现这目前是不可能的。在我看来,这是绝对不需要的,而且会降低可读性。您可以做很多其他事情,比如将它作为方法放入构造函数中


不能说this.Object=newsomeobject().Initialize(),就像答案中指定的那样,除非Initialize方法返回SomeObject。

这不可能直接实现,但您可以创建一个小助手:

public class Helper<T> where T : new()
{
    public static T Init(Action<T> body)
    {
        T obj = new T();
        body(obj);
        return obj;
    }
}
公共类帮助器,其中T:new()
{
公共静态T Init(操作体)
{
T obj=新的T();
身体(obj);
返回obj;
}
}
然后:

this.Object = Helper<SomeClass>.Init(obj => obj.Initialize());
this.Object=Helper.Init(obj=>obj.Initialize());
或更复杂的情况:

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

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

public class SomeObject 
{
    public SomeObject() 
    {
        Initialize();
    }
    public void Initialize() 
    {
        //do initialization stuff
    }
}
但是,您不应该从构造函数中调用虚拟方法


更多信息:

您可以简单地将initialize()方法放在构造函数中,但如果您不想这样做,则可以执行以下操作:

(this.Object = new SomeObject()).Initialize();
工作正常:

FYI c#5.0已经在带有VS2012的.Net4.5中发布。这在当前的c#(5.0)中肯定是不可能的。只有属性可以这样初始化(称为对象初始化)。我认为在下一个计划版本中也不可能。哎呀!我当时的意思是6.0。谢谢@sriramsakthivel你需要有强烈的动机在语言中添加这种“语法糖”特性。老实说,我看不出这种情况有什么必要。当前的语法已经简单、清晰、有效了……将
Initialize()
放入构造函数中如何?我已经尝试过了,但找不到任何方法来实现它,因此我的问题旨在询问是否可以用另一种方法实现它。就像我说的,这是不可能的,但是,是什么阻止你将方法放入构造函数中呢?是的,将它放入构造函数可能是最好的方法,正如有人在a中所建议的那样,我是一个白痴(无意讽刺)没有想到这一点。真的。但我发现这种方式更具可读性,更容易理解正在发生的事情。但无论如何还是要谢谢你。+1我肯定不会自己想出办法去做。非常有帮助,谢谢!