结构列表 - 结构项的值始终为null

时间:2011-02-08 08:19:50

标签: c# .net

我有一个结构列表: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);

我的问题:

  1. 当我尝试更改列表项(类型为struct)的值时,它不会更改它们!

  2. 我的两个int的两个数组总是设置为null!

  3. 我该如何解决?

2 个答案:

答案 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)

结构是一种值类型,所以你永远不会得到它的引用来只编辑副本。

此外你应该在这里使用一个班级。