C# 无法强制转换类型为';TextmlBatchDeleteDocument';至';System.String';

C# 无法强制转换类型为';TextmlBatchDeleteDocument';至';System.String';,c#,casting,C#,Casting,我遇到了一个以前在类型转换中从未遇到过的问题 我正试图将TextmlBatchDeleteDocument类型的对象强制转换为System.String,因此我实现了一个显式类型转换运算符来处理它 public override string ToString() { return string.Format("{0}{1}", this.Collection, this.Name); } public static explicit operator string(TextmlBat

我遇到了一个以前在类型转换中从未遇到过的问题

我正试图将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
的对象传递给第三方函数,该函数需要一个对象来实现
IList
,它最终将列表中的对象用作字符串。这就是我遇到麻烦的地方。每当我试图调用第三方函数时,就会出现这个异常

无法将“NWDA_Common.Textml.TextmlBatchDeleteDocument”类型的对象强制转换为“System.String”类型

如果我的假设是正确的,我将向函数传递一个类型为
List
的对象,但它将转换为
IList
,然后将列表中的任何对象视为基本类型
System.object
。我做了一个测试来证实这个理论,得到了同样的例外。如果我先将类型为
List
的对象强制转换为
System.object
,然后尝试对字符串进行强制转换,则会引发异常

TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
object docAsObj = doc;
string someString = (string)docAsObj;

是否有人知道如何解决这个问题,或者我一直在进行重新分解并找到另一种方法?

听起来第三方组件确实需要一个
IList,其中每个元素都是一个字符串,所以您需要提供它。转换不是多态应用的——它是基于源表达式的编译时类型的编译时选择


基本上,您需要自己为每个元素执行转换,并将转换项目的列表传递给第三方代码。

这是我希望听到的,我只是希望这其中有诀窍。那么,一旦对象被强制转换到System.object,它就会丢失子对象中定义的所有运算符,这一结论是否正确class@Wade:运算符不属于对象-它们属于类型。它们是静态的,称为非虚拟的。这与Equals(一个虚拟方法,称为多态性方法)和==(静态,不称为多态性方法)之间的区别是一样的。现在我从静态方法的角度来考虑这一点是有意义的。谢谢你的帮助。