积极答复者
获取引用类型参数的值对象 !(高手......)

问题
答案
全部回复
-
你好!我写了个简单的示例,如下:
class Program { static void Main(string[] args) { List<object> lst1 = new List<object>(); List<object> lst2 = new List<object>(); List<object> lst3 = new List<object>(); Test1(lst1); Test2(lst2); Test3(ref lst3); } static void Test1(List<object> objList) { // objList 是值类型,但objList 中的项是引用类型,所以执行后 lst1 有值 objList.Add(1); } static void Test2(List<object> objList) { // objList 是值类型 所以执行后 lst2 没有值 List<object> lst = new List<object>(); lst.Add(1); objList = lst; } static void Test3(ref List<object> objList) { // objList 是值类型, 但我们使用了 ref 关键字,所以执行后 lst3 有值 List<object> lst = new List<object>(); lst.Add(1); objList = lst; } }
知识改变命运,奋斗成就人生! -
你好引用类型当使用=赋值 实际上是把其值对象的地址传给了新的这个变量,当这个变量更改时 所做的更改都是通过这个地址去对那个值进行更改 所以之前的变量也会发生相应的更改
而值类型则是直接将值的一个副本赋值给新的这个变量,当这个变量做出修改时不会引起之前在这个值类型变量的更改
如果要使得值类型可以被更改 使用ref或者out关键字
Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond -
你好!
我写了个简单的示例,如下:class Program { static void Main(string [] args) { List<object > lst1 = new List<object >(); List<object > lst2 = new List<object >(); List<object > lst3 = new List<object >(); Test1(lst1); Test2(lst2); Test3(ref lst3); } static void Test1(List<object > objList) { // objList 是值类型,但objList 中的项是引用类型,所以执行后 lst1 有值 objList.Add(1); } static void Test2(List<object > objList) { // objList 是值类型 所以执行后 lst2 没有值 List<object > lst = new List<object >(); lst.Add(1); objList = lst; } static void Test3(ref List<object > objList) { // objList 是值类型, 但我们使用了 ref 关键字,所以执行后 lst3 有值 List<object > lst = new List<object >(); lst.Add(1); objList = lst; } }
知识改变命运,奋斗成就人生!
XXY版主,你好!
objList应该是引用类型吧!
周雪峰 -
你好!抱歉刚才误解了你的意思,参看下面的代码
class Program { static void Main(string[] args) { List<object> objList = new List<object>(); objList.Add(123); objList.Add(new DataTable()); Test(new List<object>(objList.ToArray())); } static void Test(List<object> objList) { objList.Add(234); } }
知识改变命运,奋斗成就人生! -
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Drawing;
namespace ConsoleApplication1
{
/// <summary>
/// 有关GDI+ 的简单数据类
/// </summary>
public class MyGDI
{
private Brush m_MyBrush;
public Brush MyBrush
{
get { return m_MyBrush; }
set { m_MyBrush = value; }
}private Color m_Color;
public Color Color
{
get { return m_Color; }
set { m_Color = value; }
}public MyGDI() { }
public MyGDI(Brush myBrush, Color myColor)
{
this.m_MyBrush = myBrush;
this.m_Color = myColor;
}}
class Program
{
static void Main(string[] args)
{
//源数据
List<MyGDI> OldList = new List<MyGDI>();
OldList.Add(new MyGDI(Brushes.Red, Color.Red));
OldList.Add(new MyGDI(Brushes.Blue, Color.Blue));//复制源数据
List<MyGDI> NewList = new List<MyGDI>();
NewList = CopyOldList(OldList);//我的目的就是复制以后源数据发生改变以后,复制的NewList数据不发生任何改变
OldList.Clear();
}//我的目的就是将传入的数据复制一份返回,是复制OldList该集合的值对象,而不是引用
public static List<MyGDI> CopyOldList(List<MyGDI> OldList)
{
return null;
}}
}
这一秒不放弃,下一秒就有奇迹 !