2

私のアプリケーションの1つのセクションでは、xsdスキームから生成されたタイプを使用しています-スキーマ2008と2009の2つのバージョンがあります-使用するタイプはDatumTypeです-すべてのスキームでこのタイプには同じプロパティが含まれています-名前空間を除いて正確です。DatumType(2008)をDatumType(2009)にキャストして、アプリケーションで2つではなく1つのタイプでのみ作業できるようにする方法はありますか?

私はc#で作業していて、フォームに勝ちます、ありがとう!

4

3 に答える 3

3

いいえ、コンパイラが知る限り、これらは2つの無関係なタイプであるため、一方を他方にキャストする方法はありません。

ターゲットタイプのフィールドが割り当て可能である場合は、リフレクションを使用してフィールドをコピーする短いメソッドを記述できます。

ソースタイプのオブジェクトをXMLに保存し、そのXMLをターゲットタイプのオブジェクトに読み込むコードを作成することもできます。これは、同一のフィールドの存在と、それらが同じ方法でXMLに変換されるという事実に依存しているため、少し壊れやすくなっています。

于 2012-04-18T21:53:01.867 に答える
0

私にとって最も簡単なことは、あるタイプを別のタイプに変換する小さなメソッドを構築することです(すべてがプロパティを共有しているため)。または、ソースにアクセスできる場合は、インターフェイスを実装して、そのインターフェイスとして2つのクラス。

つまり、インターフェイスA(関心のあるすべてのプロパティを含む)を継承する2つのクラスBとCがある場合、これら2つのクラスの任意のオブジェクトをAとして型キャストできます。

于 2012-04-18T21:54:46.747 に答える
0

名前空間の違いを修正する単純なXSLTを使用してXMLファイルを前処理できます。

Identityのパート1/2は、その方法を説明しています。基本的に、トランスフォームには要素に一致するテンプレートがあり、一致した要素ごとに出力が提供されます。秘訣は、データム要素に一致してそれらを変換する特定のテンプレートと、すべての種類の要素に一致してそれらを単純にコピーする一般的な変換を用意することです。

XSLTの経験がない場合でも、恐れることはありません。予想以上に簡単に学ぶことができます。XSLTチュートリアルのようなチュートリアルを使用すると、「ID」の説明を理解できます。

XslCompiledTransformクラスを使用して変換を適用できます。

Visual Studioを使用して、XSLTファイルをテストおよびデバッグできます。

于 2012-04-19T00:59:46.967 に答える