相关疑难解决方法(0)

正确公开List <T>?

我知道我不应该暴露一个List<T>属性,但我想知道这样做的正确方法是什么?例如,这样做:

public static class Class1
{
    private readonly static List<string> _list;

    public static IEnumerable<string> List
    {
        get
        {
            return _list;
            //return _list.AsEnumerable<string>(); behaves the same
        }
    }

    static Class1()
    {
        _list = new List<string>();
        _list.Add("One");
        _list.Add("Two");
        _list.Add("Three");
    }
}
Run Code Online (Sandbox Code Playgroud)

允许我的来电者简单地回到List<T>:

    private void button1_Click(object sender, EventArgs e)
    {
        var test = Class1.List as List<string>;
        test.Add("Four"); // This really modifies Class1._list, which is bad™
    }
Run Code Online (Sandbox Code Playgroud)

所以,如果我想要一个真正不可变的List<T>,我总是要创建一个新的列表?例如,这似乎有效(测试在转换后为null):

    public static IEnumerable<string> List
    {
        get
        {
            return new ReadOnlyCollection<string>(_list); …
Run Code Online (Sandbox Code Playgroud)

.net c#

12
推荐指数
2
解决办法
2599
查看次数

在处理只读List <T>成员时,我应该如何使用属性

当我想在我的课外制作一个只读的值类型时,我这样做:

public class myClassInt
{
    private int m_i;
    public int i {
        get { return m_i; }
    }

    public myClassInt(int i)
    {
        m_i = i;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来List<T>在我的课堂之外创建一个readonly类型(所以他们不能在其中添加/删除元素)?现在我只是宣布公开:

public class myClassList
{
    public List<int> li;
    public  myClassList()
    {
        li = new List<int>();
        li.Add(1);
        li.Add(2);
        li.Add(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# collections readonly

10
推荐指数
3
解决办法
8179
查看次数

标签 统计

c# ×2

.net ×1

collections ×1

readonly ×1