相关疑难解决方法(0)

什么是C#Using块,我为什么要使用它?

在C#中使用块的目的是什么?它与局部变量有什么不同?

.net c# syntax using using-statement

257
推荐指数
7
解决办法
27万
查看次数

'使用'声明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万
查看次数

结束使用关闭打开的SQL连接

如果我在一个Using中包装一个SQLConnection,我应该关闭它还是使用句柄来结束它?

using cn as new system.data.sqlclient.sqlconnection()
    cn.open
    '{do a bunch of other stuff with commands and datareaders here}
    cn.close 'Do I need this?
end using 
Run Code Online (Sandbox Code Playgroud)

.net sql vb.net sql-server

64
推荐指数
3
解决办法
3万
查看次数

C#"使用"语法

use会捕获异常还是抛出异常?即

using (StreamReader rdr = File.OpenText("file.txt"))
{
 //do stuff
}
Run Code Online (Sandbox Code Playgroud)

如果streamreader抛出异常是通过使用或抛出来捕获的,那么调用函数可以处理它吗?

c# using exception using-statement

46
推荐指数
4
解决办法
3万
查看次数

拦截IDisposable.Dispose中的异常

在该IDisposable.Dispose方法中有一种方法可以确定是否抛出异常?

using (MyWrapper wrapper = new MyWrapper())
{
    throw new Exception("Bad error.");
}
Run Code Online (Sandbox Code Playgroud)

如果在using语句中抛出异常,我想在处理IDisposable对象时知道它.

.net c# idisposable

29
推荐指数
3
解决办法
1万
查看次数

C#USING关键字 - 何时何地不使用它?

我想知道什么时候应该而且不应该在USING块中包装东西.

根据我的理解,编译器将其转换为try/finally,最后在对象上调用Dispose().

我总是使用围绕数据库连接和文件访问的USING,但它更多的是习惯而不是100%的理解.我知道你应该明确(或使用)Dispose()控制资源的对象,以确保它们立即释放,而不是每当CLR感觉到它时,但那是我理解失败的地方.

IDisposables在超出范围时是否被处置掉?

当我的对象使用Dispose来整理自己时,我只需要使用USING吗?

谢谢

编辑:我知道USING关键字上还有其他一些帖子,但我对CLR的相关答案更感兴趣,内部究竟是什么

安德鲁

c# dispose

24
推荐指数
2
解决办法
1万
查看次数

抛出异常时,确保SQL连接关闭的正确方法是什么?

我经常使用看起来像这样的模式.我想知道这是否正常,或者是否有最佳实践我不在这里申请.

具体来说,我在想; 在抛出异常的情况下,我在finally块中的代码足以确保连接被正确关闭?

public class SomeDataClass : IDisposable
{
    private SqlConnection _conn;

    //constructors and methods

    private DoSomethingWithTheSqlConnection()
    {
        //some code excluded for brevity

        try
        {
            using (SqlCommand cmd = new SqlCommand(SqlQuery.CountSomething, _SqlConnection))
            {
                _SqlConnection.Open();
                countOfSomething = Convert.ToInt32(cmd.ExecuteScalar());
            }
        }
        finally
        {
            //is this the best way?
            if (_SqlConnection.State == ConnectionState.Closed)
                _SqlConnection.Close();
        }

        //some code excluded for brevity
    }

    public Dispose()
    {
        _conn.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# sql sqlconnection

18
推荐指数
3
解决办法
2万
查看次数

即使在使用块中抛出异常,资源也会被丢弃吗?

可能重复:
在使用statment中抛出Exception时,是否仍会调用Dispose方法?

using访问数据库时,我有很多块.我想知道 - 如果必须在使用块中抛出异常,是否仍然会处理必要的资源,即使未到达块的末尾?或者我需要在catch块中手动关闭它们吗?

.net c# asp.net exception-handling using-statement

16
推荐指数
1
解决办法
7598
查看次数

一次性使用模式

  using (FileStream fileStream = new FileStream(path))
  {
    // do something
  }
Run Code Online (Sandbox Code Playgroud)

现在我知道using模式是IDisposable的一个实现,即设置了Try/Catch/Finally并在对象上调用Dispose.我的问题是如何处理Close方法.

MSDN说它没有被调用,但我已经读过了.

我知道FileStream继承自Stream,这里解释.现在说不要覆盖Close(),因为它是由Dispose()调用的.

那么有些类只是在Dispose()方法中调用Close()或者使用调用Close()吗?

c#

14
推荐指数
2
解决办法
9158
查看次数

如果在"using"块内发生异常,是否调用Dispose方法?

在C#中,如果在"using"块内发生异常,是否会调用Dispose方法?

.net c# dispose using exception

2
推荐指数
1
解决办法
4365
查看次数

多个使用块c#

我正在处理我需要访问数据库的应用程序.使用using语句很好,因为"using" statement is to ensure that the object is always disposed correctly, and it doesn't require explicit code to ensure that this happens.我有点困惑在哪里使用"使用",哪里不使用.

public int route(Route r)
{
    try
    {
        using (SqlConnection con = new SqlConnection(connectionString))
        {
            using(SqlCommand com = new SqlCommand("",con))
            {
                using (SqlDataReader sdr = com.ExecuteReader())
                {
                }
            }
        }
    }
    catch (Exception e)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net using using-statement

2
推荐指数
1
解决办法
401
查看次数

IDisposable.Dispose在使用块中的异常后永远不会被调用

我从像许多来源理解这个这个,该Dispose的方法IDisposable如果有异常被抛出总是被称为Using块.那么我有这个代码:

static class MainEntryPoint
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;

        using (var x = new Disposable())
        {
            throw new Exception("asdfsdf");
        }
    }

    private static void HandleUnhandledException(Object sender, System.UnhandledExceptionEventArgs e)
    {
        Environment.Exit(0);
    }
}

class Disposable : IDisposable
{
    public void Dispose()
    {
        System.Diagnostics.Debug.Print("I am disposed");
    }
}
Run Code Online (Sandbox Code Playgroud)

当抛出未处理的异常时,它退出应用程序.Dispose永远不会调用该方法.为什么?

.net c# idisposable exception using-statement

2
推荐指数
1
解决办法
581
查看次数