Reputation: 47783
I have this piece of code that was converted from 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);
}
I am getting an error because it's saying the ref (SqlConnection)conn is not in the form of a variable so I guess you can't pass in method params for a ref?
So this seems like a hacky solution to me though:
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);
}
Anyone know of a better way to satisfy this ref or make this cleaner?
Upvotes: 3
Views: 13593
Reputation: 34250
The purpose of ref
is to actually permit the method to modify the contents of a variable passed in by the caller. If you have incidental ref
parameters, due to conversion from Visual Basic code that used ByRef
indiscriminately, then you end up in this situation.
You have two choices:
ref
parameter qualifiers, both in the caller and the callee, orSo, the answer is, no, there is no better way to do it without getting rid of unnecessary ref
parameter qualifiers.
What is an unnecessary ref
parameter qualifier? It is one for a parameter that is never actually assigned anywhere in the body of the method. Most parameters don't need to be ref
and those that do are usually pretty obvious from inspecting logic of the method.
Upvotes: 12