我有一个结构列表:user_stocks = new List<stock_Str>();
定义了结构:
public struct stock_Str
{
public String name;
public int quote ;
public int chenge;
public bool quote_a;
public bool chenge_a;
public int[] rate_alarm;
public int[] chenge_alarm;
}
当我将项目添加到列表中时我会这样做:
stock_Str str = new stock_Str();
str.name = tbStockName.Text;
str.chenge_a = false;
str.quote_a = false;
str.quote = 0;
str.chenge = 0;
str.chenge_alarm = new int[2];
str.rate_alarm = new int[2];
for (int i = 0; i < 2; i++)
{
str.rate_alarm[i] = 0;
str.chenge_alarm[i] = 0;
}
_mainApp.user_stocks.Add(str);
我的问题:
当我尝试更改列表项(类型为struct)的值时,它不会更改它们!
我的两个int的两个数组总是设置为null!
我该如何解决?
答案 0 :(得分:9)
a:根本不应该是一个结构
b:结构的“值”永远不为空;甚至Nullable<T>
的{{1}}对烟雾,镜子和误导都是一种神奇的伎俩
重新解决问题;
1:是的,那是因为结构具有复制语义;您修改了副本 - 不是同一个
2:可能是同样的事情
这是一个更合适的实施方案;我想它会解决你的大多数问题:
null
我不清楚最后2个的意图是什么,但个人如果它是动态集合,我更喜欢列表,例如:
public class Stock
{
public string Name {get;set;}
public int Quote {get;set;}
public int Chenge {get;set;}
public bool QuoteA {get;set;}
public bool ChengeA {get;set;}
public int[] RateAlarm {get;set;}
public int[] ChengeAlarm {get;set;}
}
答案 1 :(得分:2)
结构是一种值类型,所以你永远不会得到它的引用来只编辑副本。
此外你应该在这里使用一个班级。