我想知道是否有必要Close()在下列情况下打电话(如果没有必要,为什么?)
using (var file = System.IO.File.OpenText(myFilePath))
{
...
}
Run Code Online (Sandbox Code Playgroud)
我认为在以下情况下是必要的
StreamWriter file2 = new System.IO.StreamWriter(myFilePath);
newFileContents.ForEach(file2.WriteLine);
file2.Close();
Run Code Online (Sandbox Code Playgroud)
这是对的吗?
编辑:
我认为我的问题很接近() - 具体,可能是阅读和写作之间的区别....
我正在尝试写入我的本地用户帐户无权访问的文件,如何以管理员身份打开和写入文件?
在C#中,我可以这样写:
using (new MyDisposableClass().MethodA());
Run Code Online (Sandbox Code Playgroud)
分号会显示编译器警告,指出可能出错的空语句.我没有运行上面的代码,但仍然不会调用该方法?
这种编码惯例有什么用途?我在这里看到了另一个关于此问题的线索,但我要求现在存在差异/因此有不同的回复.
谢谢
目前我的代码构造如下。
using (var sqlCon = new SqlConnection(Context.ReturnDatabaseConnection()))
{
sqlCon.Open();
try
{
//Code here
}
catch (Exception e)
{
Console.WriteLine(e);
}
finally
{
sqlCon.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,根据我的理解,使用“使用”语句将处理关闭的连接,但由于其他人所说的话,我对此表示怀疑。
谢谢
SqlConnection connection = new SqlConnection(FROM_CONFIGURATION)
SqlCommand command = new SqlCommand("SomeSQL", connection);
connection.Open();
command.ExecuteNonQuery();
command.Dispose();
connection.Dispose();
Run Code Online (Sandbox Code Playgroud)
建议上面的代码应该包含try/catch(或using),这样如果抛出异常,所有资源都会正确处理.
但是如果你不得不担心手动处理东西,那么GC有什么意义呢?!是不是GC在那里为编码器照顾这个?
我看到了这个:
using (StreamWriter sw = new StreamWriter("file.txt"))
{
// d0 w0rk s0n
}
Run Code Online (Sandbox Code Playgroud)
我尝试查找信息的所有内容都没有解释这是做什么的,而是给了我关于命名空间的东西.
可能重复:
什么是C#使用块,为什么要使用它?
所以我刚刚注意到在msdn示例和一些stackoverflow问题上有回答,其中using语句在streamwriter等之前使用,但实际上有什么好处呢?因为我从未被教过/告知/读过任何使用它的理由.
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
Console.WriteLine(sr.ReadLine());
}
Run Code Online (Sandbox Code Playgroud)
代替:
StreamReader sr = new StreamReader(path);
while (sr.Peek() >= 0)
Console.WriteLine(sr.ReadLine());
Run Code Online (Sandbox Code Playgroud) 我看到它用过,我在这里和那里读到它,它与内存管理有关.问题是,您怎么知道何时应该使用它?如果你不使用变量或实例会导致问题,你如何区分?
确切的重复:什么是C#使用块,我为什么要使用它?
using (var db1 = new DataBase1Entities())
{
using (var db2 = new DataBase2Entities())
{
var list = (from obj in db2.Table1
where !db1.Table2.Any(i => i.Table2Col == obj.Table1Col)
select obj).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何从一个数据库表中检索值并将其与另一个数据库表进行比较?如果上面的代码是正确的,那么会导致性能问题吗?
可能重复:
什么是C#使用块,为什么要使用它?
如果我运行以下代码:
using (SPWeb web = SPContext.Current.Site.OpenWeb("/myweb")){
//error happens here
}
Run Code Online (Sandbox Code Playgroud)
如果在结束括号之前发生错误web,是否会正确处理对象?
我们被告知使用对象的using语句OpenWeb是最好的,但
我们在日志中看到很多关于SPRequests和SPWeb的错误.