列出私人二传手

时间:2016-05-19 18:41:13

标签: c# linq list

我正在尝试允许我的班级用户能够添加到列表,而不是设置。因此,我希望有一个像这样的私人集合:

public class Model
{
    private IList<KeyValuePair<string, int>> pair;

    public Model()
    {
        pair = new List<KeyValuePair<string, int>>();
    }

    public IList<KeyValuePair<string, int>> Pair 
    {
        get
        {
            return pair.Where(x => x.Value > 0
                                          && !string.IsNullOrEmpty(x.Key)).ToList();
        }
        private set { pair = value; }
    }

但是,当我添加到Pair.Add()时,它无效。

我尝试了这个(有效)但是我需要get {}中的“Where”子句。我该怎么做?

public class Model
{
    public Model()
    {
        Pair = new List<KeyValuePair<string, int>>();
    }
    public IList<KeyValuePair<string, int>> Pair { get; private set; }
}

2 个答案:

答案 0 :(得分:2)

如果您想使用此方法,您可能希望在此类中实现公共Add()方法,以便将元素添加到基础私有属性中:

public class Model
{
        // Other code omitted for brevity

        public bool Add(KeyValuePair<string,int>> item)
        {
             // Add your item to the underlying list
             pair.Add(item);
        }
}

据推测,您使用的是Model.Pair的结果,并试图添加到结果中,但结果并未按预期工作(因为Model.Pair只会返回您的列表的副本,不是实际的清单本身。)

答案 1 :(得分:1)

我可能会用方法解决它

public class Model
{
    private readonly Dictionary<string, int> pairs = new Dictionary<string, int>();

    public void Add(string key, int value)
    {
        pairs[key] = value;
    }

    public IEnumerable<KeyValuePair<string, int>> GetPairs()
    {
        return from pair in pairs
               where pair.Value > 0 && string.IsNullOrEmpty(pair.Key) == false
               select pair;
    }
}