0

A、B、Cの3つのクラスがあるとしましょう。

すべてのクラスは異なるアセンブリに属します。次に例を示します。

クラス 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 に答える