[英]method with ref object parameter
嗨,我必须调用具有此签名的方法:
int MethodName(ref object vIndexKey)
如果我试着用它来打电话
String c = "690";
MethodName(ref (object) c);
它不起作用。
我能怎么做?
谢谢
你需要这样做:
String c = "690";
object o = (object) c;
MethodName(ref o);
原因是该参数必须由函数分配。 该函数可以执行以下操作:
o = new List<int>();
如果底层类型是在方法调用期间已转换为对象的字符串,则这是不可能的,因为赋值的目标仍然是字符串而不是对象。
当方法具有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,后跟与形式参数相同类型的变量引用(第5.3.3节)。 必须明确赋值变量才能将其作为参考参数传递。
是否
MethodName(ref c);
不行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.