C# 具有ref对象参数的方法

C# 具有ref对象参数的方法,c#,asp.net,C#,Asp.net,嗨,我必须调用具有此签名的方法: int MethodName(ref object vIndexKey) 如果我试着用 String c = "690"; MethodName(ref (object) c); 它不起作用 我该怎么办 谢谢你 MethodName(ref c); 不工作?您需要这样做: String c = "690"; object o = (object) c; MethodName(ref o); o = new List<int>(); pu

嗨,我必须调用具有此签名的方法:

int MethodName(ref object vIndexKey)
如果我试着用

String c = "690";

MethodName(ref (object) c);
它不起作用

我该怎么办

谢谢你

MethodName(ref c);

不工作?

您需要这样做:

String c = "690"; 
object o = (object) c;
MethodName(ref o);
o = new List<int>();
public void MethodName(ref object x)
{
    x = new object();
}
原因是该参数必须可由函数赋值。该函数可以执行以下操作:

String c = "690"; 
object o = (object) c;
MethodName(ref o);
o = new List<int>();
public void MethodName(ref object x)
{
    x = new object();
}
o=新列表();

如果基础类型是在方法调用期间强制转换到对象的字符串,则这是不可能的,因为赋值的目标仍然是字符串而不是对象。

当方法具有ref参数时,参数类型必须与参数类型完全匹配。假设
MethodName
是这样实现的:

String c = "690"; 
object o = (object) c;
MethodName(ref o);
o = new List<int>();
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) 与形式参数类型相同。A. 变量必须明确赋值 然后才能将其作为引用传递 参数

否,对于“ref”参数,参数的类型必须完全相同。这是的副本