小编Dam*_*mir的帖子

在匿名代表中捕获的私有字段

class A
{
   public event EventHandler AEvent;
}
class B
{
   private A _foo;
   private int _bar;

   public void AttachToAEvent()
   {
      _foo.AEvent += delegate()
      {
         ...
         UseBar(_bar);
         ...
      }
   }
} 
Run Code Online (Sandbox Code Playgroud)

由于delegate捕获变量this._bar,它是否隐含地保持实例B?将B通过事件处理程序和捕获的变量引用实例A吗?

如果_bar是方法的局部变量,它会有所不同AttachToAEvent吗?

因为在我的情况下,A生命的实例远远长于并且远小于实例B,我担心通过这样做导致"内存泄漏".

c# closures memory-leaks anonymous-methods object-lifetime

12
推荐指数
2
解决办法
1651
查看次数

C#银行家的舍入错误

double a = 18.565
return Math.Round(a,2)
Run Code Online (Sandbox Code Playgroud)

..返回18.57.
对于其他所有数字,我尝试过银行家的舍入按预期工作,例如Math.Round(2.565,2)返回2.56.

任何线索为什么以及何时发生?这是错误还是我错过了关于银行家四舍五入的事情?

谢谢..

c# bankers-rounding rounding

8
推荐指数
2
解决办法
4143
查看次数

Outlook加载项ClickOnce更新设置

我正在尝试使用ClickOnce部署Outlook加载项.在设置更新选项时,我注意到Outlook添加项目的选项少于Win Forms项目.例如,我无法指定所需的最低版本.这是为什么?另外,我想:

  1. 启用手动更新
  2. 问用户他是否想要更新(如果不需要).

1)我尝试使用System.Deployment.Application和CheckForDetailedUpdate()函数,但即使更新成功,安装它也有问题:如果我重新启动我的插件它会从Outlook中消失,如果我没有旧版本卡在Outlook中(和虽然通过UNC路径进一步更新表明已成功完成更新,但行为很奇怪.

2)定期发布没有添加Mage或MageUI的特殊选项本身,但加载项似乎更新而不询问用户.谷歌搜索有点显示人们正试图做相反的事情,所以我有点疑惑为什么它默认不提示更新.

我尝试使用MageUI编辑从Visual Studio生成的清单,但是它为应用程序清单生成了无效的XML(?! - 它错过了"dependentAssembly"节点中的"assemblyIdentity"节点),并且当我从VS生成的原始清单中添加丢失的节点时(并更新)并在之后签名),安装抱怨组装哈希无效.

如何部署具有上述要求的Outlook加载项?

c# clickonce outlook-addin

5
推荐指数
1
解决办法
2410
查看次数