我有一些用于序列化的其他人提供的课程。 这些类由许多具有默认值的参数构成。 我需要使用othder默认值启动它们。 它实现如下:
public class Header
{
public class SubHeader1
{
[XmlElement("paramone")]
public string param1{get;set;}
[XmlElement("paramtwo")]
public string param2{get;set;}
[XmlElement("paramthree")]
public string param3{get;set;}
[XmlElement("paramfour")]
public string param4{get;set;}
public SubHeader1()
{
param1 = "theirdefault";
param2 = "theirdefault";
param3 = "theirdefault";
param4 = "theirdefault";
}
}
public class SubHeader2
{
[XmlElement("paramone")]
public string param1{get;set;}
[XmlElement("paramtwo")]
public string param2{get;set;}
public SubHeader1()
{
param1 = "theirdefault";
param2 = "theirdefault";
}
}
Public class SubHeader3
{
public class SubSubHeader
{
[XmlElement("paramone")]
public string param1{get;set;}
[XmlElement("paramtwo")]
public string param2{get;set;}
[XmlElement("paramthree")]
public string param3{get;set;}
[XmlElement("paramfour")]
public string param4{get;set;}
...
[XmlElement("paramtwentyfive")]
pulic string param25{get;set;}
public SubHeader1()
{
param1 = "theirdefault";
param2 = "theirdefault";
param3 = "theirdefault";
param4 = "theirdefault";
...
param25 = "theirdefault";
}
}
[XmlElement("paramone")]
public string param1{get;set;}
[XmlElement("subsubheader")]
public SubSubHeader SSubHeader;
public SubHeader3()
{
SSubHeader = new SubSubHeader();
param1 = "theirdefault";
}
}
[XmlElement("subheaderone")]
public SubHeader1 SubHeaderOne;
[XmlElement("subheadertwo")]
public SubHeader2 SubHeaderTwo;
[XmlElement("subheaderthree")]
public SubHeader3 SubHeaderThree;
public Header()
{
SubHeaderOne = new SubHeader1();
SubHeaderTwo = new SubHeader2();
SubHeaderThree = new SubHeader3();
}
}
这是继承的每个类的标准。 我还有其他一些需要启动的信息,主要是在子文章中。
我创建了自己的SubHeader3对象,并在其类中创建了一个构造函数(用于测试目的),该构造函数接受此对象。 我尝试使用像这样的泛型来更新默认值
public static void MergeWith<T>(this T primary, T secondary) {
foreach (var pi in typeof(T).GetProperties()) {
var priValue = pi.GetGetMethod().Invoke(primary, null);
var secValue = pi.GetGetMethod().Invoke(secondary, null);
if (priValue == null || (pi.PropertyType.IsValueType && priValue == Activator.CreateInstance(pi.PropertyType))) {
pi.GetSetMethod().Invoke(primary, new object[]{secValue});
}
}
}
但这仅适用于SubHeader3类中的值,而不适用于嵌套的SubSubClass。 这是解决此问题的最佳方法吗?如何让它涵盖编译器安全的子类。 或者我是以错误的方式接近这个?
答案 0 :(得分:0)
a.InjectFrom(b)
.InjectFrom(c)
.InjectFrom<SomeOtherMappingAlgorithmDefinedByYou>(dOrBOrWhateverObject);