相关疑难解决方法(0)

'使用'声明vs'尝试终于'

我有一堆属性,我将使用读/写锁.我可以使用a try finally或a using子句来实现它们.

try finally我之前try,我将获得锁定,然后释放finally.在该using子句中,我将创建一个在其构造函数中获取锁的类,并在其Dispose方法中释放.

我在很多地方使用读/写锁,所以我一直在寻找可能更简洁的方法try finally.我有兴趣听听一些关于为什么不推荐一种方式的想法,或者为什么一种方式可能比另一方更好.

方法1(try finally):

static ReaderWriterLock rwlMyLock_m  = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public DateTime MyDateTime
{
    get
    {
        rwlMyLock_m .AcquireReaderLock(0);
        try
        {
            return dtMyDateTime_m
        }
        finally
        {
            rwlMyLock_m .ReleaseReaderLock();
        }
    }
    set
    {
        rwlMyLock_m .AcquireWriterLock(0);
        try
        {
            dtMyDateTime_m = value;
        }
        finally
        {
            rwlMyLock_m .ReleaseWriterLock();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

方法2:

static ReaderWriterLock rwlMyLock_m  = new ReaderWriterLock();
private DateTime dtMyDateTime_m
public …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading using-statement

74
推荐指数
4
解决办法
5万
查看次数

IDisposable在方法中创建并返回

我很高兴编写了一个工作正常的项目,并没有在运行时表现出任何奇怪的东西.所以我决定运行静态代码分析工具(我使用的是Visual Studio 2010).据说CA2000违反了规则,信息如下:

警告 - CA2000:Microsoft.Reliability:在方法'Bar.getDefaultFoo()'中,在对所有引用超出范围之前,在对象'new Foo()'上调用System.IDisposable.Dispose.

引用的代码如下:

private static IFoo getDefaultFoo()
{
    return (Baz.canIDoIt()) ? new Foo() : null;
}
Run Code Online (Sandbox Code Playgroud)

我想自己:也许条件表达会破坏逻辑(我的或验证者).改为:

private static IFoo getDefaultFoo()
{
    IFoo ret = null;
    if (Baz.canIDoIt())
    {
        retFoo = new Foo();
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

同样的事情再次发生,但现在这个对象被称为retFoo.我用谷歌搜索了,我已经知道了,我已经堆叠了.找到这篇文章.创建对象后,我无需执行任何操作.我只需要返回它的引用.但是,我尝试应用OpenPort2示例中建议的模式.现在代码如下所示:

private static IFoo getDefaultFoo()
{
    Foo tempFoo = null;
    Foo retFoo = null;
    try
    {
        if (Baz.canIDoIt())
        {
            tempFoo = new Foo();
        }
        retFoo= tempFoo;
        tempFoo = null;
    }
    finally
    { …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns static-analysis idisposable

15
推荐指数
2
解决办法
4713
查看次数