class Program {
static List<taskClas> m_listCla = new List<taskClas>();
static void Main(string[] args)
{
taskClas cla1 = new taskClas();
cla1.nValue = 1;
cla1.strValue = "1";
m_listCla.Add(cla1);
taskClas cla2 = new taskClas(); cla2.nValue = 2;
cla2.strValue = "2";
m_listCla.Add(cla2);
SetValue( cla1); Console.Write(cla1.nValue + "\r\n");
Console.Write(cla1.strValue + "\r\n");
Console.Write(m_listCla[1].GetType().IsValueType + "\r\n");
Console.Write(cla1.GetType().IsValueType + "\r\n");
}
static void SetValue( taskClas task)
{
task = m_listCla[1];
// task.nValue = 2;
// task.strValue = "2";
}
}
public class taskClas
{
public int nValue;
public string strValue;
}
不是说数组是引用类型的吗,我在SetValue函数里的改变难道不起作用?为什么输出为:1“1”falsefalse应该是2,“2”,false false才对啊
我试了一下你的程序,结果是:SetValue函数好像真的不起作用。
SetValue函数中变量task中nValue和strValue的地址是指向了m_listCla[1]中nValue和strValue的地址,但是函数完成后并没有改变cla1。就好像我们经常用的形参似的,它只是一个备份,修改它,但不会修改原始的那份,备份利用完后就被抛弃销毁了。
明明传递的是类的实例,一个引用类型,但就是没有被改变,不理解(可能是这个static void SetValue( taskClas task)函数的原因)
在你的基础上改动了一下:
1, static taskClas SetValue(taskClas task)
2, cla1 = SetValue(cla1);
结果正常
希望有高手前来啊