gpt4 book ai didi

c# - Ref 参数未分类为变量 - 更好地解决这个问题?

转载 作者:行者123 更新时间:2023-11-30 13:28:19 31 4
gpt4 key购买 nike

我有这段代码是从 VB.NET 转换过来的。

    private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout)
{
ExecuteSqlServerNonQuery(ref statement, ref commandType, ref paramCollection, ref (SqlConnection)conn, ref CommandTimeout);
}

我收到一个错误,因为它说 ref (SqlConnection)conn 不是变量形式,所以我猜你不能为 ref 传递方法参数?

所以这对我来说似乎是一个 hacky 解决方案:

    private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout)
{
SqlConnection sqlConnection = (SqlConnection)conn;

ExecuteSqlServerNonQuery(ref statement, ref commandType, ref paramCollection, ref sqlConnection, ref CommandTimeout);
}

有谁知道更好的方法来满足这个 ref 或使这个更清洁?

最佳答案

ref目的实际上是允许该方法修改调用者传入的变量的内容。如果您有偶然 ref 参数,由于从不加区别地使用ByRef 的 Visual Basic 代码转换而来,那么您最终会遇到这种情况。

你有两个选择:

  • 删除调用者和被调用者中不必要的 ref 参数限定符,或者
  • 使用真实变量,必要时使用虚拟变量作为方法的参数

所以,答案是,不,没有更好的方法可以做到这一点,而不需要摆脱不必要的 ref 参数限定符。

什么是不必要的 ref 参数限定符?它是一个参数,实际上从未在方法主体的任何地方分配。大多数参数不需要是 ref,而那些确实是的参数通常通过检查方法的逻辑非常明显。

关于c# - Ref 参数未分类为变量 - 更好地解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6352687/

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