C#中关于引用的问题

donkey301 2011-09-08 04:37:52
代码如下

int a, b;
a = new int();
b = a;
b = 1;

在b=1后我的本意是希望a也为1,但实际上我b=a只是拷贝了地址,a的值还是0.

但在c++中就可以用*b=1来实现,请问c#中有类似的方法吗?

int *a, *b;
a = new int();
b = a;
*b = 1;

...全文
116 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
donkey301 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rczjp 的回复:]

C# code
通过传递引用来实现吧

public void PassRefInt(ref int i1, ref int i2)
{
i1 = i2;
}

int a = 12;
int b = 34;
PassRefInt(ref a, ref b);
Response.Write……
[/Quote]
我实际的问题不是int,而是IDictionary
现在的做法是自己写了个copy值的函数,大致如下:

void CopyDict(IDictionary source, ref IDictionary dest)
{
foreach (KeyValuePair pair in source)
{
dest.Add(pair.Key, pair.Value);
}
}

不知道有没有简单点的方法?
rczjp 2011-09-08
  • 打赏
  • 举报
回复
通过传递引用来实现吧

public void PassRefInt(ref int i1, ref int i2)
{
i1 = i2;
}

int a = 12;
int b = 34;
PassRefInt(ref a, ref b);
Response.Write(a);

//34
diecode 2011-09-08
  • 打赏
  • 举报
回复
int是值类型,不是引用类型
vrhero 2011-09-08
  • 打赏
  • 举报
回复
可以装箱...但完全没必要,栈操作比堆操作快得多,多赋一次值比你装来拆去好得多...
donkey301 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]

int是值类型,不是引用类型
[/Quote]
我只想实现c++中

int *a, *b;
a = new int();
b = a;
*b = 1;

这种功能。
rinall 2011-09-08
  • 打赏
  • 举报
回复
不会出现两个值类型指向同一块内存
rinall 2011-09-08
  • 打赏
  • 举报
回复
值类型只保存值本身不保存地址。
值类型在内存中都是独立的,不会出现两个值类型指向同一个值。
vrhero 2011-09-08
  • 打赏
  • 举报
回复
你完全理解错了...这里没有什么“拷贝地址”的概念...

值类型赋值就是复制“值”...这里只所以“a的值还是0”,恰恰因为它们的“地址”没有半毛钱关系...
bdmh 2011-09-08
  • 打赏
  • 举报
回复
int是值类型,不是引用类型
Just4life 2011-09-08
  • 打赏
  • 举报
回复
使用不安全代码也可以这么干

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧