2011-11-21 76 views
3

填充类我有这样的代码:我怎样才能申报,并在同一时间

public class test { 
    public string aa { get; set; } 
    public string bb { get; set; } 
    public string cc { get; set; } 
} 

var a = new test { 
    aa = "a", 
    bb = "b" 
} 

var d = a; 
d.cc = "c"; 

有没有办法为我创造d类,并在同一时间填充它。例如,最后两行可以合并为一个?请注意,我想避免使用构造函数来完成此操作,因为有时候它会是除cc以外的其他字段,我将填充它们。

请注意我的编辑

var d = a; 
+6

这样做是怎么回事如何初始化'a'?如果你真的想在一条线上,而不只是在一个声明中,你可以把它放在一条线上。 –

+2

旁注。你不创建类'd',你创建类'test'的实例 – Reniuz

+0

正如@Reniuz指出的那样,它也将它设置为'a'所指的同一个实例。即改变'd'的属性并改变'a'。 –

回答

0

鉴于新的说明问题,这个怎么样:

请注意,它也改变a(与您的代码相同),它不会创建副本。如果您想要一份副本,请使用Oded的解决方案。

public class test 
{ 
    public string aa { get; set; } 
    public string bb { get; set; } 
    public string cc { get; set; } 

    public test AlterTest(Action<test> alteration) 
    { 
     alteration(this); 
     return this; 
    } 
} 

static void Main(string[] args) 
{ 
    var a = new test 
    { 
     aa = "a", 
     bb = "b" 
    }; 

    var d = a.AlterTest((t) => t.cc = "c"); 
} 

我会说这是不是你原来的代码,虽然为可读(因为你需要知道什么AlterTest呢,这是不是很多)。

+0

这是一个非常有趣的解决方案。我现在会研究这一点。谢谢 –

3

你可以做到这一点,你有a以同样的方式:

var d = new test { 
    cc = "c" 
} 

这句法是使用构造函数中的参数传递,而是称为object initializer

每当你从一个类创建一个新的对象,一个构造函数被调用。没有办法避免这种情况。


更新:

现在,它更清楚,你想做的事,一个前进的方向是使用copy constructor并用其作为新对象的基础:

public class test { 

    public test(test o) 
    { 
     aa = o.aa; 
     bb = o.bb; 
    } 

    public string aa { get; set; } 
    public string bb { get; set; } 
    public string cc { get; set; } 
} 

var a = new test { 
    aa = "a", 
    bb = "b" 
} 

var d = new test(a) {cc = "c"}; 
+2

它*使用构造函数。该代码将调用无参数构造函数,然后设置属性。 –

+0

对不起,我犯了一个错误,然后失去了互联网连接,所以我不能立即纠正它。我现在更改了代码。 –

+0

@Jon - 当然你是对的。我应该更清楚。 – Oded

3

这线不是complile:

var d = test; 

初始化只适用于当在您的装箱物体情况下,仅在这一点上:

var d = new test { 
    cc = "c" 
} 

:资源下载文件大约初始化:http://msdn.microsoft.com/en-us/library/bb384062.aspx

+0

对不起,我犯了一个错误,然后失去了互联网连接,所以我不能立即纠正它。我现在更改了代码。 –

+1

无论如何,不​​可能在已经初始化的对象上使用初始值设定项。据我所知,这没有简短的语法。 –

0

你可以为类创建一个构造函数,并在需要的值传递

//Class constructor 
public Test(string aa, string bb, string cc) 
{ 
    this.aa = aa; 
    ... 
} 




var test = new Test("a","b","c") 
+0

我不能使用构造函数。有时我想更新字段cc,其他时间可能是许多不同领域之一。 –

+0

没有重载你的构造函数各种变量我不知道该怎么建议。 –