2 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
cmd在這種情況下, using 語(yǔ)句是否對(duì)輸出參數(shù)調(diào)用 Dispose ?
不,不是的。它只調(diào)用Dispose直接在using語(yǔ)句括號(hào)內(nèi)創(chuàng)建/分配/傳遞的實(shí)例。
您可以使用多個(gè)using語(yǔ)句并像這樣堆疊它們。
using(DbDataReader reader = getReader("SELECT * FROM Cmds", out DbCommand cmd))
using(cmd)
{
}
還要注意在第一條using語(yǔ)句之后缺少開(kāi)/關(guān)括號(hào),這減少了代碼縮進(jìn),并且cmd在第二條using語(yǔ)句處理后無(wú)法引用。

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
您可以編寫(xiě)一個(gè)簡(jiǎn)單的 IDisposable 包裝類并返回:
public sealed class DbData: IDisposable
{
public DbData(DbDataReader reader, DbCommand command)
{
Reader = reader;
Command = command;
}
public void Dispose()
{
Reader .Dispose();
Command.Dispose();
}
public DbDataReader Reader { get; }
public DbCommand Command { get; }
}
然后你GetReader()會(huì)返回一個(gè)DbData:
public DbData GetReader(string sql)
{
DbDataReader reader = ...;
DbCommand command = ...;
return new DbData(reader, command);
}
然后你可以將它與using.
using (var result = GetReader("SELECT * FROM Cmds"))
{
// Do something with result.Command and result.Reader
}
- 2 回答
- 0 關(guān)注
- 253 瀏覽
添加回答
舉報(bào)