2012-05-14 3 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' does,' 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

Смежные вопросы