在C#中使用的返回变量){using(DataTableproperties=newDataTable()){//做一些事情returnproperties;这将处置属性变量??执行此操作后仍然收到此警告:警告34CA2000:Microsoft.Reliability:在方法“test.test”中,System.IDisposable.Dispose在对象“属性”的所有引用超出范围之前被调用。有任何想法吗?谢谢如果你想返回它,你不能将它包装在using语句中,因为一旦你离开花括号,它就会超出范围并被处理掉。您必须像这样实例化它:publicDataTableFoo(){DataTableproperties=newDataTable();返回属性;稍后调用Dispose()。是的,它会处理掉它并归还它。这几乎总是一件坏事。实际上对于DataTable,Dispose几乎从不做任何事情(如果它在某个地方,IIRC除外),但这仍然是一个坏主意。通常,您应该将已处置的对象视为不可用。据推测,这是创建一次性对象的工厂方法的模式。但是,我仍然看到代码分析对此也有抱怨:WrappertempWrapper=null;包装器包装器=空;尝试{tempWrapper=newWrapper(callback);初始化(tempWrapper);包装器=tempWrapper;tempWrapper=null;}finally{if(tempWrapper!=null)tempWrapper.Dispose();}返回包装器;这应该保证如果初始化失败,对象被正确处理,但如果一切成功,从方法返回一个未公开的实例。MSDN文章:CA2000:在丢失范围之前处理对象。是的。为什么要在代码块末尾使用using关键字?using关键字的目的是处理对象。http://msdn.microsoft.com/en-us/library/yh598w02.aspx使用块的要点是为值/对象创建一个人工范围。当using块完成时,该对象将被清理,因为它不再需要了。如果你真的想返回你正在创建的对象,那么你不想使用它。这会工作得很好。publicDataTablefoo(){DataTable属性=newDataTable();//做一些事情返回属性;}使用using关键字的代码扩展为:{DataTableproperties=newDataTable();try{//做一些事情返回属性;}finally{if(properties!=null){((IDisposable)properties).Dispose();}}}您的变量正在根据其使用方式进行处置。如果您希望能够返回一个属性,请不要将其包装在using块中。其他响应是正确的:一旦退出using块,对象就会被丢弃。使用块非常适合确保及时处理对象,因此如果您不想依赖函数的使用者来记住稍后处理对象,您可以尝试这样的事情:publicvoidUsingDataContext(Actionaction){using(DataContextctx=newDataContext()){action(ctx)}}所以可以这么说:以上是C#学习教程:返回C#中使用的变量共享的全部内容,如果对大家有用,需要进一步了解C#希望大家多多关注教程——varuser=GetNewUserInfo();UsingDataContext(c=>c.UserSet.Add(user));本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
