C# 为什么将此字符串强制转换为DLL中的对象?
我比较了2个DLL,这是我不经常做的,当我看到这一行时,我感到困惑:C# 为什么将此字符串强制转换为DLL中的对象?,c#,.net,C#,.net,我比较了2个DLL,这是我不经常做的,当我看到这一行时,我感到困惑: myObj.ErrorString = (string) (object) num + (object) " file(s) failed to import. Run the Import Report for more information."; num是一个int,它被强制转换为对象,然后转换为字符串。我的硬编码字符串正在转换为对象,以便“添加到”已转换为字符串的num变量 为什么编译器要“添加”一个字符串和一个对象
myObj.ErrorString = (string) (object) num + (object) " file(s) failed to import. Run the Import Report for more information.";
num
是一个int
,它被强制转换为对象,然后转换为字符串。我的硬编码字符串正在转换为对象
,以便“添加到”已转换为字符串的num
变量
为什么编译器要“添加”一个字符串
和一个对象
?如果它是(string)(object)num+(string)“some text”,不是更有意义吗代码>?编译器将对a+b
的调用更改为对的调用。具有可接受类型参数的方法的唯一重写是。因此,两个参数都需要强制转换为对象
,然后才能传递给方法
有关更多信息,请查看链接到的文章-查看string.concat的工作原理;这也许可以为你解释;这也是一个很好的例子,说明了为什么需要显式转换某些内容以避免装箱etc@TheBeardedLlama那怎么解释呢,这没有道理。像这样打拳击是没有意义的,最后它只是myObj.ErrorString=num+“文件…”;你像人一样思考,而不是像电脑一样思考:在这个角色中没有拳击;String
和Object
都是引用类型。您如何“比较”这些DLL?我猜你在用某种反汇编程序,对吧?这看起来像是反汇编程序的工件,而不是编译器。试着看看MSIL。啊,是的,我道歉。这是真的,那是一个拳击演员阵容。好吧,那很简单。我现在就写一个答案。@TheBeardellama-为什么不?@TheBeardellama-为什么不回答一个问题,即使它是一个(边界)重复的问题?