0

我正在将 VB6 代码转换为 C# 在这里我必须将结构数组转换为 C# 中的 List 方法,但无法修改以下示例代码中的值,出现错误为“无法修改返回值,System.Collections.Generic.List<test.Program.TagFieldValue>.this[int]因为它不是变量”。

我做错了什么..有没有其他方法可以在不将我的类型转换为类的情况下做到这一点?

using System;
using System.Collections.Generic;

namespace test
{
    class Program
    {
        private struct TagFieldValue
        {
            private int _ID;
            public int ID { get { return _ID; } set { _ID = value; } }
        }

        private List<TagFieldValue> mFieldValues = new List<TagFieldValue>();
        static void Main(string[] args)
        {
            Program obj = new Program();
            obj.test();
        }

        public void test()
        {
            for (int i = 1; i <= 10; i++)
            {
                TagFieldValue temp = new TagFieldValue();
                temp.ID = i;                
                mFieldValues.Add(temp);                
            }

            for (int i = 0; i <= 9; i++)
            {
                mFieldValues[i].ID = mFieldValues[i].ID + 10;
            }

            for (int i = 0; i <= 9; i++)
            {
                Console.WriteLine(mFieldValues[i].ID);
            }
            Console.ReadLine();
        }
    }
}
4

2 回答 2

2

Structs作为值传递,而不是引用。mFieldValues[i].ID = mFieldValues[i].ID + 10;将修改列表中的副本,而不是struct本身。要修改列表中的值,您需要创建新的TagFieldValue

for (int i = 0; i <= 9; i++)
{
    mFieldValues[i] = new TagFieldValue { ID = mFieldValues[i].ID + 10 };
}

或更改TagFieldValueclass

private class TagFieldValue
{
    public int ID { get; set; }
}
于 2017-02-27T06:58:38.530 回答
0

结构不是那么灵活。输入也不能被定义,所以如果你想这样做,你应该使用一个类。我遇到了类似的问题,将其更改为课程并没有出现任何问题。

于 2017-03-01T11:50:38.130 回答