タイプキャストでこれまでに遭遇したことのない問題が発生しています。'TextmlBatchDeleteDocument'タイプのオブジェクトを 'System.String'にキャストすることができません
TextmlBatchDeleteDocument型のオブジェクトをSystem.Stringにキャストしようとしているため、これを処理する明示的な型変換演算子を実装しました。
public override string ToString()
{
return string.Format("{0}{1}", this.Collection, this.Name);
}
public static explicit operator string(TextmlBatchDeleteDocument doc)
{
return doc.ToString();
}
成功しました。
TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
string someString = (string)doc;
私はIList
を実装し、それが最終的に文字列としてリスト内のオブジェクトを使用するオブジェクトを必要とサードパーティの関数にタイプList<TextmlBatchDeleteDocument>
のオブジェクトを渡していますが。これは私が困っているところです。私はサードパーティ関数を呼び出そうとする度にこの例外を取得します。
「NWDA_Common.Textml.TatchmlBatchDeleteDocument」タイプのオブジェクトを「System.String」と入力してキャストできません。
私の仮定が正しければ、私は関数にタイプList<TextmlBatchDeleteDocument>
のオブジェクトを渡していますが、その後、基本型System.Object
として私のリストで任意のオブジェクトを扱いますどのIList
にキャストします。私はこの理論を確認するためのテストを行い、同じ例外がありました。私がタイプList<TextmlBatchDeleteDocument>
のオブジェクトをSystem.Object
にキャストした後、文字列へのキャストを試みると例外がスローされます。
TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
object docAsObj = doc;
string someString = (string)docAsObj;
この問題を解決する方法を知っているか、私はリファクタリングし、別の方法を見つけることで立ち往生しています誰もがありますか?
これは私が聞くと予想されていたものです。私はちょうどそれにトリックがあることを望んでいました。 – Wade
+1。すべての演算子、変換が含まれている場合はTrueです。 –
オブジェクトがSystem.Objectにキャストされると、子クラスに定義されている演算子がすべて失われると結論付けることになります。 – Wade