我有一种情况,我在下面有3 classes
:
public class A
{
public int Id { get; set; }
public int BranchId { get; set; }
public int LocationId { get; set; }
public int DepID { get; set; }
public int Age { get; set; }
public string Name { get; set; }
}
public class B
{
public int LocationId { get; set; }
public int DepID { get; set; }
public int Age { get; set; }
public string Name { get; set; }
}
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
从上面classes
我们可以看出,b / w 3 classes
几乎没有共同属性。
我遇到这种情况,我需要通过组合3 classes
中的值来创建最终输出,并在低classes
时将值覆盖。
例如: -
考虑属性所有3 classes
A
,B
和C
的属性,但如果C
中的值不是null
虽然合并class
C
中的值具有优先权,但所有属性都是如此。
我已经使用 Reflection
,通过使用classes
和{{读取我拥有的所有3个.GetType()
的实例中的值来实现此目的1}}属于.GetProperties()
库的方法。
使用当前System.Reflection
方法,我将能够处理任何Reflection based
中的任何属性。
但我读过classes
表现不佳。
那么有更好的方法吗?
答案 0 :(得分:1)
您需要查看继承。您的数据结构应如下所示:
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
public class B : C
{
public int LocationId { get; set; }
public int DepID { get; set; }
}
public class A : B
{
public int Id { get; set; }
public int BranchId { get; set; }
}
您只需创建正确类型的对象,每个对象都具有所需的属性,但您不会获得重复的属性。
答案 1 :(得分:1)
您可以使用继承将公共属性推送到基类,然后从它们派生以创建其他属性,例如:
public class A : B
{
public int Id { get; set; }
public int BranchId { get; set; }
}
public class B : C
{
public int LocationId { get; set; }
public int DepID { get; set; }
}
public class C
{
public int Age { get; set; }
public string Name { get; set; }
}
答案 2 :(得分:0)
接口可用于标识属性组。此方法不会强制您更改已建立的类层次结构。
interface IData1
{
int Id { get;set; }
int BranchId { get;set; }
}
interface IData2
{
int LocationId { get;set; }
int DepID { get;set; }
}
interface IData3
{
int Age { get;set; }
string Name { get;set; }
}
public class A : IData1, IData2, IData3
{
public int Id { get;set; }
public int BranchId { get;set; }
public int LocationId { get;set; }
public int DepID { get;set; }
public int Age { get;set; }
public string Name { get;set; }
}
public class B : IData2, IData3
{
public int LocationId { get;set; }
public int DepID { get;set; }
public int Age { get;set; }
public string Name { get;set; }
}
public class C : IData3
{
public int Age { get;set; }
public string Name { get;set; }
}
void WriteData1(IData1 data){}
void WriteData2(IData2 data){}
void WriteData3(IData3 data){}
void WriteProperties(A a, B b, C c)
{
WriteData1(a);
WriteData2(a);
WriteData2(b);
WriteData3(a);
WriteData3(b);
WriteData3(c);
}