C# Ref参数未被归类为变量-更好地解决这个问题?
我有一段从VB.NET转换而来的代码C# Ref参数未被归类为变量-更好地解决这个问题?,c#,C#,我有一段从VB.NET转换而来的代码 private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout) { ExecuteSql
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传入方法params
因此,这对我来说似乎是一个骇人的解决方案:
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的目的是允许方法修改调用者传入的变量的内容。如果由于不加区别地使用了
ByRef
的Visual Basic代码的转换,您有附带的ref
参数,那么您最终会遇到这种情况
你有两个选择:
- 删除调用者和被调用者中不必要的
参数限定符,或ref
- 使用real变量,如果必须,使用伪变量作为方法的参数
ref
参数限定符
什么是不必要的
ref
参数限定符?它适用于在方法体的任何位置都没有实际指定的参数。大多数参数不需要是ref
,而那些参数需要是ref
的,从检查方法的逻辑来看通常是非常明显的。只要去掉所有的ref……你不应该修改这些参数中的任何一个……你使用ref
参数有什么原因吗?老实说,我看到了警告灯。看起来你不能同时通过ref
和打字。我将不得不在两行中,但它看起来一点也不“黑客”。它可能看起来“黑客”,但这正是VB在幕后所做的。在你的另一个问题(现已删除)中,实际上是昨天的一个问题中,你展示了VB版本的源代码,所有参数都是ByVal
。因此,正如您介绍的ref
一样,C#转换并不纯粹。问题是“为什么?”这是故意的还是可能是误解?