2012-05-14 58 views
0
class person 
{ 
[Required(ErrorMessage = "Please enter the FirstName of person")] 
string FirstName{get; set ;} 

[Required(ErrorMessage = "Please enter the LastName of person")] 
string LastName{get; set ;} 
} 

class Student 
{ 
string FirstName{get; set ;} 
string LastName{get; set ;} 
} 

Person p = new Person(); 
Student s = new Student(); 

我想将属性从person复制到Student; 它怎么样?如何将一个属性从一个类复制到另一个类?

+0

那些是私人性质? –

回答

0

我认为通过“属性”,你实际上意味着“财产” ......

有没有“自动”的方式做到这一点,你需要手动复制值。

Person p = ... 
Student s = new Student { FirstName = p.FirstName, LastName = p.LastName }; 

根据上下文,你也可以使用一个对象映射器像AutoMapper

+0

OP确实说过“从一个班级复制到另一个班级”。你认为他们的意思是“实例”而不是“阶级”?而且由于这些房产是私人的,你不能简单地从外面复制它们,因为你没有权限。我不认为你的回答完全回答了这个问题。 –

+0

@MrLister,我不认为OP公布了他的实际代码。将这些房产私有化是没有意义的。无论如何,我就是这样理解这个问题的,这个问题并不完全清楚......但我可能是错的。 –

+0

我可能是错的,在这种情况下,对不起。但是如果你需要假设OP代表“属性”而不是“属性”,“实例”而不是“类”,并且这些属性实际上是公开的,并且在你所有的假设下,这个问题变得非常简单,那么我认为他的意思就是他说的方式。此外,示例_does_在其中具有属性... –

4

你可以使用继承来简化这个过程。

class Student : Person 
{ 

} 
+0

这是“正确的”OO方法,但请注意,如果RequiredAttribute类标记为继承,则只会将属性“复制”:[AttributeUsage (AttributeTargets.Property,Inherited = true)]'。如果不是,则'Student'将从'Person'继承属性,但不会继承它们的[[Required]]属性。 – Keith

+0

@Keith'RequiredAttribute'就是这样。 –

+0

'System.ComponentModel.DataAnnotations.RequiredAttribute'没有,'Microsoft.Build.Framework.RequiredAttribute'不,'RequiredAttribute'也可以是他们自己定制的。虽然我认为首先是最有可能的,但我仍然认为澄清是值得的。 – Keith

0

如果Student继承Person,它都将具有的属性,两者的属性。

class Person 
{ 
    [Required(ErrorMessage = "Please enter the FirstName of person")] 
    string FirstName { get; set; } 

    [Required(ErrorMessage = "Please enter the LastName of person")] 
    string LastName { get; set; } 
} 

class Student : Person 
{ 
} 
0

你可以使用这样的反思:

foreach (var getter in s.GetType().GetProperties()) 
{ 
    var newData = getter.GetValue(newProject, null); 
    var setter = p.GetType().GetProperty(prop.Name) 
    setter.SetValue(p, newData, null); 
} 
+0

这将复制属性的值,但对它们的属性不做任何事情。 – Keith

+0

我想这就是他想要的(他的问题不是那么详细) – Kristof

相关问题