我只需要写入现有变量的函数结果。
Boolean existing = Mutex.TryOpenExisting(name: key, rights: MutexRights.ReadPermissions, result: out Mutex _);
我可以在这段代码中使用“空变量”吗?它会调用 Dispose(); 自动为这个对象?
Mutex mutex或者声明一个变量并在调用方法后调用是否正确mutex.Dispose();?
PS谁不明白问题的本质,更多关于空变量的信息在这里:https ://docs.microsoft.com/en-us/dotnet/csharp/discards
文档本身描述了“空变量”只是指一些“空”内存区域。也就是说,它们不占用空间。
这不太可能意味着他们会在 IDisposable 对象上调用 Dispose()。
我对这个问题进行了个人调查,并编写了一个测试程序。一个简单的 winforms 应用程序,开始时调用该方法:
我发布结果:
正如您从图片中看到的 - 内存已增加并释放。我们使用了 dispose
现在是测试的时候了:
从图片中可以看出,当我使用 Discard 变量时,内存没有被释放。
由此我们得出结论,Discards 不会处理数据。现在是时候进行更多测试了:
设计:
不会工作。表示 _ 在这种情况下不存在。
设计:
将给出完全相同的结果。
结论:绝对不可能在 IDisposable 对象上使用空变量。
因此,在这种特殊情况下,最正确的代码是: