gpt4 book ai didi

c# - TypeCast 克服接口(interface)限制?

转载 作者:太空宇宙 更新时间:2023-11-03 23:07:33 26 4
gpt4 key购买 nike

我正在为我的 SQL 数据库逻辑使用 IDbCommand 和 IDbDataParameter 接口(interface),但意识到由于接口(interface)限制,我无法获取 sqlCommand.parameter["ID"].Value。

对接口(interface)对象进行类型转换以克服接口(interface)的限制是否是一种好习惯?

例子

using (IDbCommand SqlCmd = CommandProvider.GetSPCommand(conn))
{
// setup sqlcmd with output paramter and executenonquery ...
ID = Convert.ToInt32(((SqlCommand)SqlCmd).Parameters["ID"].Value);
}

最佳答案

不,这不是好的做法。

首先,你不应该沮丧,除非绝对有必要。如果您需要一个仅由接口(interface)实现提供的值,请从该实现开始。在您的情况下,如果 CommandProvider.GetSPCommand 返回一个 SqlCommand,则只需执行以下操作:

using (SqlCommand SqlCmd = CommandProvider.GetSPCommand(conn))
{
// setup sqlcmd with output paramter and executenonquery ...
ID = Convert.ToInt32(((SqlCommand)SqlCmd).Parameters["ID"].Value);
}

如果它没有那样做,那么你就遇到了你做错的第二件事,那就是在检查它是否安全之前进行转换。如果返回的项不是 SqlCommand,您的代码将抛出 InvalidCastException。相反,请使用 as 运算符进行检查:

using (IDbCommand SqlCmd = CommandProvider.GetSPCommand(conn))
{
SqlCommand fullSqlCommand = SqlCmd as SqlCommand;
if (fullSqlCommand != null)
{
// setup sqlcmd with output paramter and executenonquery ...
ID = Convert.ToInt32(fullSqlCommand.Parameters["ID"].Value);
}
else
{
//Some failsafe
}
}

当然,只使用界面是首选,但在这种情况下,如果您无法控制它,这可能会很困难。

关于c# - TypeCast 克服接口(interface)限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40667860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com