0

假设我有 3 个 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 <-------- ASSEMBLY_C

A 类有一个 IList 自定义集合 C 类有一个 IList 自定义集合

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。

如何做到这一点?

4

2 回答 2

1

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

在 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);
于 2013-05-06T22:14:36.957 回答
-1

这是不可能的:如果您没有关于该对象的任何信息,则无法转换该对象。唯一的方法是在 ASSEMBLY_D 中添加接口:

  • IDataTypeA(由 DataTypeA 实现)
  • IDataTypeC(由 DataTypeC 实现)

然后所有程序集都引用 ASSEMBLY_D,而 ASSEMBLY_C 具有将 DataTypeA 转换为 DataType C 所需的信息

于 2013-05-06T22:15:17.783 回答