Tag: using statement

IDisposable – 自动检查使用构造

有没有人知道自动查找任何变量的方法,其中类型实现IDisposable但不使用using构造? 即。 检查可能未发布的非托管资源的方法? 此外,是否可以查看正在运行的应用程序所拥有的资源的数量和类型?

VS2010 / C#中的全局“使用”指令?

我很确定我知道答案,但我想知道是否有办法在我的C#项目中定义全局“使用”指令,这样我就不必在每个代码文件的顶部重复该指令。 我的兴趣实际上源于在.NET Framework中引入扩展方法。 使用扩展方法的唯一方法是为包含扩展方法的命名空间定义using指令。 如果没有using指令,我将失去扩展方法的Intellisensefunction,这意味着我不会总是看到可用的方法。 作为框架开发人员,确保框架中提供的类型和方法清晰可供开发人员使用对我来说至关重要。 虽然文档和培训服务于他们的目的,但我发现大多数开发人员都会遇到这个时期并滚动智能感知列表以查看可用的方法和属性。 即使他们转到对象浏览器或查看参考文档,他们也不会知道扩展方法,除非他们知道它。 这就是Intellisense的用武之地。 而且,虽然我可以将使用指令添加到VS使用的模板,但VS中的“删除并排序”选项将删除引用扩展方法的指令(如果没有使用)。 那么,所有这一切,是否有任何方法可以在VS 2010中定义全局“使用”指令? 如果没有,MS将来会考虑它的任何机会吗?

在using语句中声明2个类型会产生编译错误吗?

我想使用这行代码: using (ADataContext _dc = new ADataContext(ConnectionString), BDataContext _dc2 = new BrDataContext(ConnectionString)){ // …} 这给出了编译错误: 不能在for,using,fixed或declartion语句中使用多个类型。 我觉得这可能吗? MSDN说它是: http : //msdn.microsoft.com/en-us/library/yh598w02%28VS.80%29.aspx在MSDN示例代码中使用了Font,它是类,因此是引用类型以及我的两个DataContext类。 这里出了什么问题? 我的尝试与MSDN示例有何不同?

什么时候处理?

我对所有关于IDispose和“使用”语句的讨论感到困惑。 我想知道是否有人可以告诉我是否需要在以下测试示例中使用“using”语句或某种IDispose实现… public class Main() { MyFile myFile = new MyFile(“c:\subdir\subdir2\testFile.txt”); Console.Writeline(“File Name: ” + myFile.FileName() + “File Size: ” + myFile.FileSize()); } public class MyFile { private FileInfo _fInfo; public MyFile(string fullFilePath) { _fInfo = new FileInfo(fullFilePath); } public string FileName() { return _fInfo.Name; } public long FileSize() { return _fInfo.Length; } }

嵌套使用语句的最佳实践?

我有一个代码块如下,我使用3嵌套using块。 我发现使用try finally块我可以避免这种情况,但如果有两个以上的使用语句,那么最好的方法是什么? private FileStream fileStream = null; private Document document = null; private PdfWriter pdfWriter = null; using (fileStream = new FileStream(“ABC.pdf”, FileMode.Create)) { using (document = new Document(PageSize.A4, marginLeft, marginRight, marginTop, marginBottom)) { using (pdfWriter = PdfWriter.GetInstance(document, fileStream)) { document.AddAuthor(metaInformation[“author”]); document.AddCreator(metaInformation[“creator”]); document.AddKeywords(“Report Generation using I Text”); document.AddSubject(“Document subject”); document.AddTitle(“The document title”); } } […]

在C#或方法中使用语句会更好吗? 这适用于外部(COM)对象吗?

什么是更好的,using指令,或者在完成对象时使用dispose指令? using(FileStream fileStream = new FileStream( “logs/myapp.log”, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using(StreamReader streamReader = new StreamReader(fileStream)) { this.textBoxLogs.Text = streamReader.ReadToEnd(); } } 另一方面,当我正在处理System.Net.Mail时,我被告知我需要对象的Dispose()来释放任何杂散锁。 有没有一致的指导? 在给定对象的给定情况下,如何判断哪些更合适?

我不太了解使用/ Disposable对象的工作原理

我问了一个关于从函数中返回一个Disposable( IDisposable )对象的问题 ,但我认为如果我在那里提出这个问题,我会讨论这个问题。 我创建了一些示例代码: class UsingTest { public class Disposable : IDisposable { public void Dispose() { var i = 0; i++; } } public static Disposable GetDisposable(bool error) { var obj = new Disposable(); if (error) throw new Exception(“Error!”); return obj; } } 我故意用这种方式编码,因为我打电话给: using (var tmp = UsingTest.GetDisposable(true)) { } 使用调试器,我注意到Dispose方法永远不会执行,即使我们已经实例化了一个Disposable对象。 如果我正确理解Dispose的目的,如果这个类实际上已经打开了句柄等,那么我们就不会在完成它们后立即关闭它们。 […]

C#using语句

我真的想把这个弄出来。 请看下面的代码: using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, “SELECT * FROM MyDBTable”)) { List resultsList = new List(); foreach (DataRow dataRow in resultTable.Rows) { resultsList.Add(dataRow[0].ToString()); } return resultsList; } 数据表是否处理? 有人可以解释这是如何转换为try / catch / finally块的吗? MSDN声明如果发生exception,仍会调用Dispose方法但是return语句呢? 或者我应该使用下面的代码: List resultsList = new List(); using (DataTable resultTable = DBUtility.GetSingleDBTableResult(connectionString, “SELECT * FROM MyDBTable”)) { foreach (DataRow dataRow in […]

在C#中使用(IDisposable obj = new …)来编写流中的代码块(例如XML)

我已经开始使用实现IDisposable的类来使用using语句在流中编写块。 这有助于保持正确的嵌套并避免丢失或错误放置的开始/结束部件。 基本上,构造函数写入块的开头(例如打开XML标记),Dispose()结束(例如关闭XML标记)。 示例是下面的UsableXmlElement(它适用于大型XML,因此内存中的LINQ to XML或XmlDocument不是选项)。 但是,这些IDisposable不实现Microsoft推荐的复杂模式,使用Destructor / Finalizer,单独的Dispose(bool)方法和GC.SuppressFinalize()。 Dispose只是简单地写出end元素,就是这样。 这有什么不妥的,或者这是保持元素正确嵌套的好方法吗? class UsableXmlElement : IDisposable { private XmlWriter _xwriter; public UsableXmlElement(string name, XmlWriter xmlWriter) { _xwriter = xmlWriter; _xwriter.WriteStartElement(name); } public void WriteAttribute(string name, T value) { _xwriter.WriteStartAttribute(name); _xwriter.WriteValue(value); _xwriter.WriteEndAttribute(); } public void WriteValue(T value) { _xwriter.WriteValue(value); } public void Dispose() { _xwriter.WriteEndElement(); } } […]

使用块使用块

可能重复: 如果我不在我的C#控制台应用程序中关闭System.Diagnostics.Process会发生什么? 由于System.Diagnostics.Processinheritance自实现IDisposable Component ,我是否应该始终using块创建Process ? 例如,这……: using (var process = new Process()) { process.StartInfo.FileName = “some process.exe”; process.Start(); process.WaitForExit(); } ……而不是这个: var process = new Process { StartInfo = { FileName = “some process.exe” } }; process.Start(); process.WaitForExit(); 我问,因为我很少看到Process出现在using块中; 例如, Process的MSDN页面不使用它。 使用对象初始化程序也很有帮助。 如果我应该使用它,那么我应该去“改造”它到我现有的代码库吗? 如果没有这样做会有什么后果? (假设在每种情况下都正确调用WaitForExit() 。)