例如,我有下面一小段代码,可以运行没有问题: class Program
{
static void Increment(out int i,int inc=4)
{
i = 4;
}
static void Main(string[] args)
{
int i = 2;
Increment(out i);
}
}可是如果我把Increment函数做个修改: static void Increment(out int i,int inc=4)
{
i += inc;
}这下编译就有错误了error CS0269: Use of unassigned out parameter 'i'
error CS0177: The out parameter 'i' must be assigned to before control leaves the current method
这是为什么呢? 我想做的只是把i的赋值变成了+=。而传入之前的i是已经有值的。再说int本身也是一种值对象而不是引用对象啊。我的需求就是设计一个Increment函数,让输入输出参数增加某个数值。难道C#做不到这一点么?
我的程序改怎么改?
{
static void Increment(out int i,int inc=4)
{
i = 4;
}
static void Main(string[] args)
{
int i = 2;
Increment(out i);
}
}可是如果我把Increment函数做个修改: static void Increment(out int i,int inc=4)
{
i += inc;
}这下编译就有错误了error CS0269: Use of unassigned out parameter 'i'
error CS0177: The out parameter 'i' must be assigned to before control leaves the current method
这是为什么呢? 我想做的只是把i的赋值变成了+=。而传入之前的i是已经有值的。再说int本身也是一种值对象而不是引用对象啊。我的需求就是设计一个Increment函数,让输入输出参数增加某个数值。难道C#做不到这一点么?
我的程序改怎么改?
解决方案 »
- 未能加载文件或程序集“Office, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f1
- C# 简单问题
- 有点疯了DataGridView绑定combox的问题!
- confirm("sdfsdf");在中文系统时会弹出消息框 "确认"和"取消",在英文系统弹出的是"OK"和"Cancel".有没有办法令在中文系统也弹出"OK"和"Cancel"
- C#调用dll,出现“尝试读取或写入受保护的内存,这通常指示其他内存已损坏".请高手帮忙!
- spread 使用疑难 在线等待
- 关于类的问题
- 知道IP,端口号,用户名和密码,如何能够直接连接读取出视频?
- C# 电脑既连接的本地连接又连接WIFI的问题
- c#操作mysql怎样判断连接已经被断开?
- 1个事件使用另1个事件的结果
- C# 摄像头录像
那么你的第二个例子里面当使用+=的时候 需要对i重新赋值在使用.
你要的是传出+传入, out换成ref就好了
static void Increment(out int i,int inc=4)
{
i += inc; 等价于 i=i+inc; //i没赋值,所以出错了
}
static void Increment(int j, out int i, int inc = 4)
{
i = j;
j += inc;
}
static void Main(string[] args)
{
int i = 2;
Increment(i, out x);
}