您好我必须调用具有此签名的方法:
int MethodName(ref object vIndexKey)
如果我尝试用
调用它String c = "690";
MethodName(ref (object) c);
它不起作用。
我该怎么办?
感谢
答案 0 :(得分:10)
你需要这样做:
String c = "690";
object o = (object) c;
MethodName(ref o);
原因是该参数必须由该函数分配。该函数可以执行以下操作:
o = new List<int>();
如果基础类型是在方法调用期间已转换为对象的字符串,那么这是不可能的,因为赋值的目标仍然是字符串而不是对象。
答案 1 :(得分:2)
当方法具有ref参数时,参数类型必须与参数类型完全匹配。假设MethodName
实现如下:
public void MethodName(ref object x)
{
x = new object();
}
如果只能使用ref c
来调用它,您会发生什么?它会尝试将普通System.Object
的引用写入System.String
类型的变量,从而打破类型安全。
因此,您需要一个object
类型的变量。您可以按照klausbyskov的回答中的说明执行此操作,但请注意,值不会然后被复制回原始变量。您可以使用强制转换执行此操作,但请注意它可能会失败:
string c = "690";
object o = c;
MethodName(ref o);
// This will fail if `MethodName` has set the parameter value to a non-null
// non-string reference
c = (string) o;
以下是C#3.0规范的相关内容,第10.6.1.2节(强调我的):
当形式参数是参考时 参数,对应的参数 在方法调用中必须包含 关键字ref后跟a 变量引用(第5.3.3节)的 与形式参数相同的类型。一个 变量必须明确赋值 之前它可以作为参考传递 参数。
答案 2 :(得分:-1)
MethodName(ref c);
不起作用?