我在C#中工作,我一直在using块来声明实现IDisposable对象,这显然是你应该做的。 但是,当我滑倒的时候,我看不出一个简单的方法。 Visual Studio似乎没有以任何方式表明这一点(我只是错过了什么?)。 我每次宣布什么都应该检查一下帮助,逐渐build立一个百科全书式的记忆,其中的物品是不是一次性的? 看起来不必要,痛苦,容易出错。 你如何处理这个? 编辑: 看一下相关的问题边栏,我发现了另外一个问题 ,清楚地表明Dispose()应该被对象的终结器调用。 所以,即使你从来没有自己调用它,它应该最终发生,这意味着如果你不使用(这是我认为我一直很担心),你将不会有内存泄漏。 唯一需要注意的是,垃圾收集器不知道对象将多less额外的内存作为非托pipe的东西,所以它不会有一个准确的想法,多less内存将通过收集对象被释放。 这将导致垃圾收集器的性能比平时更差。 简而言之,如果我错过了一个using ,那不是世界末日。 我只是希望能够给它带来至less一个警告。 (题外话:为什么没有特殊的降价链接到另一个问题?) 编辑: 好吧,不要吵闹 这是超级duper所有发射戏剧性的花栗鼠级重要的称之为Dispose()或我们都会死 。 现在。 因此,为什么这么容易 – 到底为什么它被允许 – 做错了? 你必须走出正确的道路。 像所有其他事情一样,会导致世界末日(显然)。 这么多封装,是吧? [偷懒,厌恶]
我有一个C#解决scheme与Visual Studio 2010几个项目。 一个是testing项目(我将称之为“ PrjTest ”),另一个是Windows Forms Application项目(我将称之为“ PrjForm ”)。 PrjForm引用了第三个项目,它能够成功地引用和使用。 PrjForm引用PrjTest ,而PrjForm有一个using语句的类: using PrjTest; 引用已被正确添加 using语句是正确的 拼写是正确的 PrjTest成功build立 PrjForm几乎构build,但在using PrjTest; 与错误一致: 无法findtypes或名称空间名称“PrjTest”(您是否缺lessusing指令或程序集引用?) 我试过以下解决方法: 删除了Resharper(因为Resharper没有任何错误的认识到所引用的项目,我认为这可能值得一试) 删除并重新添加引用和使用语句 重新创buildPrjForm PrjForm目前驻留在PrjTest文件夹内,我试着将它移动到外部文件夹 将该解决scheme加载到另一台计算机上,并附带VS 2010的新副本 我做了功课,花了很长时间在网上寻找答案,没有任何解决scheme帮助。 我还有什么可以尝试的?
Java有一个使用语句,可以在hibernate打开会话时使用? 在C#中,它是这样的: using (var session = new Session()) { } 所以对象超出范围并自动closures。
在下面的例子中,如果在using语句中抛出exception,连接是否会closures并处理? using (var conn = new SqlConnection("…")) { conn.Open(); // stuff happens here and exception is thrown… } 我知道下面的代码将确保它,但我很好奇如何使用语句。 var conn; try { conn = new SqlConnection("…"); conn.Open(); // stuff happens here and exception is thrown… } // catch it or let it bubble up finally { conn.Dispose(); } 有关: 抛出exception时,确保SQL连接的正确方法是什么?
哪一个: using (var myObject = new MyClass()) { try { // something here… } catch(Exception ex) { // Handle exception } } 要么 try { using (var myObject = new MyClass()) { // something here… } } catch(Exception ex) { // Handle exception }