首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁止在lambda上显示Microsoft.Reliability警告

禁止在lambda上显示Microsoft.Reliability警告
EN

Stack Overflow用户
提问于 2012-11-23 20:00:20
回答 2查看 190关注 0票数 1

我在一个类似单例的类中有以下代码:

代码语言:javascript
复制
    private readonly Lazy<IWindsorContainer> LazyContainer =
        new Lazy<IWindsorContainer>(() => new WindsorContainer().Install(new WindsorInstaller()));

鉴于WindsorContainer确实需要发布,我会在主机中晚些时候发布,所以很自然地,我想抑制有关IDisposable可能未发布的淘气Microsoft.Reliability警告。问题是它是在lambda中创建的,看起来SuppressMessage对它没有任何影响,我绝对不希望它在整个类上发生。

我通过在构造函数上隐藏属性来解决这个问题。但仍然对此不太满意。

是我错过了什么,还是SuppressMessage没有跟上c#的发展?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-23 20:22:22

我认为它正在考虑这样一种可能性,即调用Install()失败,然后容器(尚未分配给任何变量)不会被释放。您可以在那里添加try/catch,使表达式更加冗长,但符合如下规则(未经过测试,但您应该明白了):

代码语言:javascript
复制
private readonly Lazy<IWindsorContainer> LazyContainer =
    new Lazy<IWindsorContainer>(() => { 
        var container = new WindsorContainer();
        try { container.Install(new WindsorInstaller())); }
        catch { using(container) {} throw; }
        return container; });
票数 2
EN

Stack Overflow用户

发布于 2012-11-26 18:14:57

正如fsimonazzi正确指出的那样,这是关于调用新的WindsorContainer().Install(新的WindsorInstaller()),它在将IDisposable保存到成员变量之前使用它(因此不能保证它会被保存到成员变量)。

对于我自己来说,我决定将其重构为以下内容:

代码语言:javascript
复制
class Program : IDisposable
{

    private Disposo _disposo = new Disposo();
    //private Disposo _disposo = new Disposo().Yeah(); // this will cause warning

    public Program()
    {
        _disposo.Yeah(); // this will not
    }

    public void Dispose()
    {
        if (_disposo != null)
        {
            _disposo.Dispose();
            _disposo = null;
        }
    }

    static void Main(string[] args)
    {
        using (var p = new Program()) { }
    }
}

class Disposo : IDisposable
{
    public void Dispose() { }

    public Disposo Yeah() { return this; }
}

在某个地方

代码语言:javascript
复制
    private static readonly Lazy<Program> LazyInstance = new Lazy<Program>();

道德吗?尽管声称"CA2000:在所有对它的引用之前处置对象都超出了范围“。是被破坏的,可以忽略和抑制,但情况并不总是这样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13528730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档