これは私のコードです。「newDataTable()...」と「newDataColumn()...」でCA2000が表示されます。
usersDS.Tables.Add(new DataTable()
{
TableName = "Users",
Columns = { new DataColumn() { ColumnName = "Handle", DataType = typeof(string) }, new DataColumn() { ColumnName = "Nickname" ,DataType = typeof(string) } }
});
変数を宣言せずに修正することは可能ですか?
これは、グローバルキャッシュを使用する場合のCA2000 IDisposable C#コンパイラの警告を修正する方法とほぼ同じです。多分それはその複製と見なされるべきです。よく分かりません。
コード分析は、オブジェクトを破棄せずに、また別の場所に安全に保管せずにメソッドを完了することが理論的に可能であると正当に不満を述べていIDisposable
ます。後者は、DataTable
オブジェクトの初期化中またはDataTable
オブジェクトのオブジェクトへの追加中に例外が発生した場合に発生する可能性がありusersDS.Table
ます(それが何であれ)。
ここで例外がスローされないことを保証できる場合は、CAの警告を抑制しても問題ありません。その場合、あなたはCAができる以上のことを知っており、あなたは自分が何をしているのかを知っていると約束しています。
保証ができない場合は、いいえ…ローカル変数を導入せずに警告を修正して、例外が発生した場合にオブジェクトを破棄できるようにすることはできません。例えば:
DataTable dataTable = null;
DataColumn dataColumn1 = null, dataColumn2 = null;
try
{
dataColumn1 = new DataColumn() { ColumnName = "Handle", DataType = typeof(string) };
dataColumn2 = new DataColumn() { ColumnName = "Nickname", DataType = typeof(string) };
dataTable = new DataTable()
{
TableName = "Users",
Columns = { dataColumn1, dataColumn2 }
};
usersDS.Tables.Add(dataTable);
}
catch
{
if (dataTable != null)
{
dataTable.Dispose();
}
if (dataColumn1 != null)
{
dataColumn1.Dispose();
}
if (dataColumn2 != null)
{
dataColumn2.Dispose();
}
throw;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加