加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何设置一个c#方法范围的变量影响另一个?

发布时间:2020-12-15 07:48:03 所属栏目:百科 来源:网络整理
导读:这个真让我难过.我和另一位打电话给我的开发商合作,因为他无法相信他所看到的.我们一起调试了调试器,我也看到了它并没有解释.这是场景.他正在编写一个通过自动生成的COM包装器与第三方COM对象进行交互的方法(仅通过添加COM组件作为参考生成.这是他的方法的顶
这个真让我难过.我和另一位打电话给我的开发商合作,因为他无法相信他所看到的.我们一起调试了调试器,我也看到了它并没有解释.这是场景.他正在编写一个通过自动生成的COM包装器与第三方COM对象进行交互的方法(仅通过添加COM组件作为参考生成.这是他的方法的顶部:
public bool RefolderDocument(ref IManDocument oDoc)
    {
        string strCustom1 = (string) oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom1);
        string strCustom2 = (string) oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom2);

代码的目的是从“文档”对象(oDoc)获取项目编号和子项目编号.

这是你走过时发生的事情.在第一次赋值后,strCustom1具有预期值“32344”(项目编号),strCustom2按预期为空.在第二次赋值之后,strCustom2得到子项目号“0002” – 但是strCustom1已经改为32334 – 一个字符已被更改!?

它让我感到震惊,因为某种老式的c语言堆栈溢出(即使它与COM组件进行互操作,我也不希望在托管应用程序中使用它).我们都感到困惑.为了破解这种奇怪的现象,我尝试将第一个字符串的内容复制到另一个位置,如下所示:

public bool RefolderDocument(ref IManDocument oDoc)
    {
        string strCustom1 = string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom1));
        string strCustom2 = string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom2));

结果相同!我们此时正在抓住吸管,并将代码从.NET 4中删除到.NET 3.5(CLR 2)但没有变化.一个可能相关的观点是,这是一项服务,我们将附加到服务流程.构建目标是x86,服务位置肯定在Debug输出构建文件夹中.

这有什么合理的解释吗?我很难过如何继续.

解决方法

看起来strCustom1和strCustom2都被设置为引用,返回GetAttributeValueByID的结果.我知道不是为什么,而且看看这里的其他人(Paging Dr. Skeet lol ……)是否可以.

在短期内,我认为你会发现这将为你解决问题……

public bool RefolderDocument(ref IManDocument oDoc)
    {
        string strCustom1 = "" + string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom1));
        string strCustom2 = "" + string.Copy((string)oDoc.GetAttributeValueByID(imProfileAttributeID.imProfileCustom2));

我的想法基本上是让它评估表达而不是直接使用引用…

马丁.

PS. string.Copy()有什么用?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读