可能最直接的方法是这样的:
TextBox New = new TextBox {
Size = Old.Size,
Location = Old.Location,
Multiline = Old.Multiline
};
如果这是你需要做的很多事情,你可以编写一个扩展方法来做同样的事情:
public static class TextBoxExtensions {
public static TextBox Copy(this TextBox textBoxToCopy) {
var copiedTextBox = new TextBox {
copiedTextBox = textBoxToCopy.Size,
copiedTextBox = textBoxToCopy.Location,
copiedTextBox = textBoxToCopy.Multiline
};
}
}
用法:
var copyOfOld = Old.Copy();
如果您要添加更多要复制的属性,我会考虑使用 AutoMapper 并定义 TextBox 和 TextBox 之间的映射。如果您对该路径感兴趣,请告诉我,我会发布示例。
它将把它变成一个衬里,但你需要对 AutoMapper 的依赖,但它在 NuGet 上可用:http: //nuget.org/packages/AutoMapper/2.2.0
首先,依赖 AutoMapper。
在项目中的某处定义映射:
Mapper.CreateMap<TextBox, TextBox>();
用法:
var newTextBox = Mapper.Map<TextBox, TextBox>(Old);
或者,如果你已经有一个实例,你想把它塞进:
Mapper.Map(Old, newTextBox);
AFAIK,没有内置的单行解决方案,所以它要么是扩展方法,要么依赖于 AutoMapper。扩展方法不必那样做,您可以在那里使用反射或其他选择。
我几乎在所有项目中都使用 AutoMapper,它非常宝贵。
您可以在地图定义中定义许多映射,然后您的所有副本都成为一个衬里。好吧,除了定义:)