我遇到了一个我以前从未遇到类型转换的问题。
我正在尝试将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;
但是我将List<TextmlBatchDeleteDocument>
类型的对象传递给第三方函数,该函数需要一个对象来实现IList
,并且它最终将使用列表中的对象作为字符串。这是我遇到麻烦的地方。每当我尝试调用第三方函数时,我都会收到此异常。
无法将“NWDA_Common.Textml.TextmlBatchDeleteDocument”类型的对象强制转换为“System.String”。
如果我的假设是正确的,我将函数传递给List<TextmlBatchDeleteDocument>
类型的对象,但它会被转换为IList
,然后会将列表中的任何对象视为基类型System.Object
。我做了一个测试来证实这个理论并得到了同样的例外。如果我首先将List<TextmlBatchDeleteDocument>
类型的对象转换为System.Object
,然后尝试对字符串进行强制转换,它会抛出异常。
TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
object docAsObj = doc;
string someString = (string)docAsObj;
有没有人知道如何解决这个问题,还是我坚持重新分解并找到另一种方式?
答案 0 :(得分:4)
听起来第三方组件真的需要一个IList
,其中每个元素都是一个字符串 - 这就是你需要提供它的东西。转换不是多态应用的 - 它是基于源表达式的编译时类型的编译时选择。
基本上,您需要自己为每个元素执行转换,并将转换后的项目列表传递给第三方代码。