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”参数,参数的类型必须完全相同。这是的副本