5

カスタムタイプのコンバータークラスを作成しようとしています。あるタイプ(およびそのすべてのプロパティ)を、一致するプロパティを持つ別のタイプに変換します。

問題は、プロパティが単純な型ではなく、カスタム型でもある場合に発生します。
カスタムタイプは、同じソリューション内の異なる名前空間に存在することを除いて、すべて同じです。
TypeTwoオブジェクトはWebサービス参照です。

例えば

public TypeOne ConvertToTypeTwo (TypeTwo typeTwo)
{
var typeOne = new TypeOne();
typeOne.property1 = typeTwo.property1; //no problem on simple types
typeOne.SubType = typeTwo.SubType; //problem!
...
}

上記の行で発生するエラーは次のとおりです。

エラー166タイプ'TypeTwo.SubType'を'TypeOne.SubType'に暗黙的に変換できません

私はそのようにキャストしてみました

typeOne.SubType = (TypeOne)typeTwo.SubType;

しかし、入手してください:

エラー167タイプ'TypeTwo.SubType'を'TypeOne.SubType'に変換できません

そしてそのように

typeOne.SubType = typeTwo.SubType as TypeOne;   

しかし、入手してください:

エラー168参照変換、ボクシング変換、ボックス解除変換、ラッピング変換、またはnull型変換を介してタイプ'TypeTwo.SubType'を'TypeOne.SubType'に変換できません

他にどのような選択肢があるのか​​、あるいは根本的に間違ったことをしているだけなのかわかりません。何かご意見は?

4

2 に答える 2

6

2つのサブタイプが異なるタイプの場合、2つのタイプ間で変換するために別のコンバーターを作成する必要があります。

例えば:

public TypeOne ConvertToTypeTwo (TypeTwo typeTwo)
{
    var typeOne = new TypeOne();
    typeOne.property1 = typeTwo.property1; //no problem on simple types
    typeOne.SubType = ConvertToTypeTwo(typeTwo.SubType); //problem!
}

public TypeOneSubtype ConvertToTypeTwo(TypeTwoSubType typeTwo)
{
    var subOne = new TypeOneSubType;
    subOne.property1 = typeTwo.property1;
    // etc.
}
于 2012-05-24T16:44:49.203 に答える
6

あなたはそれをすることはできません。2つのタイプのレイアウトがまったく同じ(同じタイプの同じフィールド)であっても、一方から他方にキャストすることはできません。 それは不可能だ。

代わりに行う必要があるのは、型から別の型に変換できるコンバーター(メソッド、別のクラス、またはキャスト演算子のいずれかとして)を作成することです。

于 2012-05-24T16:45:13.300 に答える