增加结构数组中的一个字段

本文关键字:一个 字段 结构 数组 增加 | 更新日期: 2023-09-27 18:08:31

我在很多地方发现c#结构应该被视为不可变的,但我希望有人能帮助我理解以下代码的行为:

public partial class Form1 : Form
{
    private struct SocSearchDomains
    {
        public string UrlName;
        public DateTime LastRequestStampDate;
        public int ErrorsCount;
        public SocSearchDomains(string urlName, DateTime requestStampDate)
        {
            UrlName = urlName;
            LastRequestStampDate = requestStampDate;
            ErrorsCount = 1;
        }
    }
    private static SocSearchDomains[] searchDomain { get; set; }
    private static SocSearchDomains searchDomain1 { get; set; } 
    public Form1()
    {
        InitializeComponent();
        searchDomain = new SocSearchDomains[1];
        searchDomain[0] = new SocSearchDomains("192.168.1.81", DateTime.Now);
        searchDomain1 = new SocSearchDomains("192.168.1.81", DateTime.Now);
    }
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(string.Format("SearchDomain[0]: {0}, SearchDomain1: {1}", searchDomain[0].ErrorsCount, searchDomain1.ErrorsCount));
        System.Threading.Interlocked.Increment(ref searchDomain[0].ErrorsCount);
        System.Threading.Interlocked.Increment(ref searchDomain1.ErrorsCount);
    }
}

基本上,当我尝试增加SearchDomain1.ErrorsCount时,我得到一个"不能修改返回值…因为它不是一个变量",但增量工程的searchDomain[0].ErrorsCount(当评论联锁SearchDomain1.ErrorsCount)。为什么会出现这种行为,在多线程应用程序中使用这种互锁(在结构数组中)是否安全?

增加结构数组中的一个字段

回应为什么是这种行为,在class和Struct之间选择帮助我回应:"值类型数组是内联分配的,这意味着数组元素是值类型的实际实例"。现在,对于我的第二个问题,如果它是安全的或不安全的,我认为最好是遵循规则时使用的结构(在同一链接):如果它是不可变的。因此,我最好使用类来实现这个目的。