Он хочет сказать следующее:
"Если у вас есть два класса, которые имеют большинство одинаковых свойств, вы можете привести объект из класса a
к классу b
и автоматически заставить систему понятьназначение через имена общих свойств? "
Вариант 1: использовать отражение
Недостаток: это замедлит вас больше, чем вы думаете.
Вариант 2: Создайте один класспроисходят от другого, первого с общими свойствами, а другое - от него.
Недостаток: в сочетании!если вы делаете это для двух слоев в вашем приложении, тогда два слоя будут связаны!
Пусть будет:
class customer
{
public string firstname { get; set; }
public string lastname { get; set; }
public int age { get; set; }
}
class employee
{
public string firstname { get; set; }
public int age { get; set; }
}
Теперь вот расширение для типа объекта:
public static T Cast<T>(this Object myobj)
{
Type objectType = myobj.GetType();
Type target = typeof(T);
var x = Activator.CreateInstance(target, false);
var z = from source in objectType.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source ;
var d = from source in target.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source;
List<MemberInfo> members = d.Where(memberInfo => d.Select(c => c.Name)
.ToList().Contains(memberInfo.Name)).ToList();
PropertyInfo propertyInfo;
object value;
foreach (var memberInfo in members)
{
propertyInfo = typeof(T).GetProperty(memberInfo.Name);
value = myobj.GetType().GetProperty(memberInfo.Name).GetValue(myobj,null);
propertyInfo.SetValue(x,value,null);
}
return (T)x;
}
Теперь вы используете его так:
static void Main(string[] args)
{
var cus = new customer();
cus.firstname = "John";
cus.age = 3;
employee emp = cus.Cast<employee>();
}
Метод приведения проверяет общие свойства между двумя объектами и выполняет назначение автоматически.