在c#中只读一个列表

stu*_*221 1 c# class list readonly-collection

我有这个示例代码.我想要做的是使"Nums"值只能使用"AddNum"方法写入.

namespace ConsoleApplication1
{
    public class Person
    {
        string myName = "N/A";
        int myAge = 0;
        List<int> _nums = new List<int>();

        public List<int> Nums
        {
            get
            {
                return _nums;
            }
        }

        public void AddNum(int NumToAdd)
        {

            _nums.Add(NumToAdd);
        }

        public string Name { get; set; }
        public int Age { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,我已经尝试了一些关于AsReadOnly()和readonly关键字的东西,但我似乎无法让它做我想做的事情.

以下是我必须访问该属性的代码示例.

Person p1 = new Person();
p1.Nums.Add(25); //access 1
p1.AddNum(37); //access 2

Console.WriteLine("press any key");
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

我真的希望"访问1"失败,"访问2"是唯一可以设置值的方式.在此先感谢您的帮助.

Ale*_*nda 6

√请使用ReadOnlyCollection,ReadOnlyCollection的子类,或者在极少数情况下使用IEnumerable属性或返回表示只读集合的​​值.

本文的引用.

你应该有这样的东西:

List<int> _nums = new List<int>();

public ReadOnlyCollection<int> Nums
{
    get
    {
        return _nums.AsReadOnly();
    }
}
Run Code Online (Sandbox Code Playgroud)