C# のブロックの目的は何ですかUsing
? ローカル変数とどう違うのですか?
ベストアンサー1
型が IDisposable を実装している場合、その型は自動的に破棄されます。
与えられた条件:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
これらは同等です:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
2 番目は読みやすく、保守も簡単です。
C# 8以降では新しい構文using
こうすることで、より読みやすいコードになるかもしれません:
using var x = new SomeDisposableType();
独自のブロックはなく{ }
、using のスコープは宣言の時点から宣言されているブロックの終わりまでです。つまり、次のようなことを回避できます。
string x = null;
using(var someReader = ...)
{
x = someReader.Read();
}
そして、これを持ってください:
using var someReader = ...;
string x = someReader.Read();