c# . net中的自定义助手转换器
本文关键字:转换器 自定义 net | 更新日期: 2023-09-27 18:12:26
让我们假设我有三个类A, B和c。
所有类属于不同的程序集,例如:
A类属于汇编ASSEMBLY_A,类B属于汇编ASSEMBLY_B;类C属于汇编ASSEMBLY_C
同时,ASSEMBLY_A引用了ASSEMBLY_B,ASSEMBLY_C引用了ASSEMBLY_B,ASSEMBLY_B没有引用任何程序集A/b
这是:ASSEMBLY_A——> ASSEMBLY_B & lt ;-------- ASSEMBLY_C
类A有一个list自定义集合类C有一个illist自定义集合
class DataTypeA
{
propertyA1 -> string type
propertyA2 -> int type
propertyA3 -> bool type
}
class DataTypeC
{
propertyC1 -> string type
propertyC2 -> int type
propertyC3 -> bool type
}
注意propertyA1等价于propertyC1, propertyA2等价于propertyC2, propertyA3等价于propertyC3。
所以我想在ASSEMBLY_B中有一个辅助方法来做以下事情:
1)将A类IList转换为C类IList。2)将C类IList转换为a类IList
如何实现这一点?
您可以使用泛型来完成此操作,但是您需要一个接口。
在ASSEMBLY_B:
中创建如下接口public interface IDataType
{
string property1 {get; set;}
int property2 {get; set; }
bool property3 {get; set;}
}
然后在ASSEMBLY_B:
中创建一个像这样的泛型方法public Y Convert<T, Y>(T itemToConvert) where T : new(), IDataType where Y : new(), IDataType
{
return new Y
{
property1 = itemToConvert.property1,
property2 = itemToConvert.property2,
property3 = itemToConvert.property3
};
}
确保你的两个类都正确地实现了这个接口。之后,您可以像这样调用该方法:
DataTypeA itemToConvert;
// set some values here
DataTypeC converted = ASSEMBLY_B.Convert<DataTypeA, DataTypeC>(itemToConvert);
这是不可能的:如果您没有该对象的任何信息,则无法转换该对象。唯一的方法是在ASSEMBLY_D:
中添加接口。- IDataTypeA(由DataTypeA实现)
- IDataTypeC(由DataTypeC实现)
那么所有的程序集引用ASSEMBLY_D,并且ASSEMBLY_C具有将DataTypeA转换为DataType C所需的信息