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

如何实现这一点?

c# . net中的自定义助手转换器

您可以使用泛型来完成此操作,但是您需要一个接口。

在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所需的信息