我正在尝试允许我的班级用户能够添加到列表,而不是设置。因此,我希望有一个像这样的私人集合:
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; }
}
答案 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;
}
}