我正在更新包含out参数的方法。在将参数设置为默认值之前,我需要检查参数的值。
public int DoWork(out int param)
{
param = 0;
}
然而,当我尝试做这样的事情时
public int DoWork(out int param)
{
if(param == 8)
param = 0;
}
我收到错误消息“使用未分配的参数'参数'”。
有没有办法可以在分配之前使用传递给方法的值?
更新:我无法使用ref关键字。很多代码都会破坏,而且它不是设计的一部分
答案 0 :(得分:3)
您可以使用ref
关键字。
public int DoWork(ref int param)
{
if(param == 8)
param = 0;
}
这样,您可以为参数指定一个新值,但也可以使用旧值。看看http://msdn.microsoft.com/en-us//library/14akc2c7.aspx
答案 1 :(得分:3)
如果你真的需要并且想作弊,你可以。这是示例代码:
using System;
using System.Reflection.Emit;
namespace Test774
{
class MainClass
{
public static void Main(string[] args)
{
var a = 666;
DoWork(out a);
}
public static int DoWork(out int param)
{
var dynamicMethod = new DynamicMethod("ParameterExtractor", typeof(int), new [] { typeof(int).MakeByRefType() });
var generator = dynamicMethod.GetILGenerator();
generator.Emit(OpCodes.Ldarg_0);
generator.Emit(OpCodes.Ldind_I4);
generator.Emit(OpCodes.Ret);
var parameterExtractor = (MethodWithTheOutParameter)dynamicMethod.CreateDelegate(typeof(MethodWithTheOutParameter), null);
Console.WriteLine(parameterExtractor(out param));
param = 1;
return 0;
}
public delegate int MethodWithTheOutParameter(out int a);
}
}
答案 2 :(得分:2)
您应该使用“ref”关键字而不是“out”。
“Out”具体表示参数在方法中初始化并赋值,之前无需初始化,因此编译器假定参数刚刚声明但没有值。
相反,“参考”完全符合您的要求。public int DoWork(ref int param)
{
if(param == 8)
param = 0;
}
//your code:
int val = 5;
DoWork(ref val);
val.ToString(); // outputs 5
val = 8;
DoWork(ref val);
val.ToString(); // outputs 0
答案 3 :(得分:1)
有没有办法可以在分配之前使用传递给方法的值?
不,没有,也没有任何价值(零或垃圾)。