Csharp/C#教程:如何将Debug.Write与动态数据一起使用?分享


如何将Debug.Write与动态数据一起使用?

我正在做一些Adobe InDesign脚本。 他们的COM实现实际上是为VB设计的,因此报告数据类型并不严谨,偶尔需要使用动态。

我正在尝试调试一块看起来像这样的代码:

foreach (dynamic pi in current.PageItems) { if (pi is TextFrame) { var frame = pi as TextFrame; var str = frame.Contents.ToString(); Debug.WriteLine(str); } } 

这给了我一个像这样的RuntimeBinderException:

附加信息:无法动态调用方法’WriteLine’,因为它具有条件属性

我得到的问题是,使用条件属性,需要处理动态在运行时解析到的类型的代码版本可能已经编译出来,但我明确地将我想调试的内容转换为字符串,所以我不明白为什么这仍然在发生。 我该如何解决这个问题?

你在这里被使用var感到厌烦,这是我的猜测。

我假设Contentsdynamic

考虑这个例子:

 dynamic d = null; var s = d.ToString(); 

sdynamic而不是string

您需要在调用ToString之前将object ToStringobject ,或者将ToString的结果ToString转换为string 。 重点是,在某个地方,某个地方,你需要一个演员来摆脱dynamic循环。

这就是我解决它的方法:

 string str = ((object)frame.Contents).ToString(); Debug.WriteLine(str); 

要么

 string str = frame.Contents.ToString() as string; Debug.WriteLine(str); 

但我明确地将我想调试的内容转换为字符串

事实并非如此。

 var str = frame.Contents.ToString(); 

这条线仍然是完全动态的。

您需要将其显式声明为string

或者,您可以通过将frame明确声明为TextFrame来进行静态化。

没有人这么说过,所以我愿意。

更改

  var str = frame.Contents.ToString(); 

上述就是C#学习教程:如何将Debug.Write与动态数据一起使用?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  string str = frame.Contents.ToString(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1015281.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐