我有这段代码是从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);
}
任何人都知道更好的方法来满足这个参考或使这个更清洁?
答案 0 :(得分:12)
ref
的目的实际上是允许该方法修改调用者传入的变量的内容。如果您有偶然的 ref
参数,由于从不加选择地使用ByRef
的Visual Basic代码进行转换,那么您最终会遇到这种情况。
您有两种选择:
ref
参数限定符,或所以,答案是,不,没有更好的方法可以做到这一点而不必删除不必要的ref
参数限定符。
什么是不必要的ref
参数限定符?它是一个参数,它在方法体中的任何位置实际上都不会被赋值。大多数参数不需要是ref
,而那些参数通常在检查方法逻辑时非常明显。