在C#类中,我有一个列表和列表的两个不同的getter:
private List<A> a;
public List<A> EveryA
{
get
{
if (a == null) a = new List<A>();
return a;
}
}
public List<A> FilteredA
{
get
{
return EveryA.FindAll(a => a.IsInFilter);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:语法怎么样FilteredA.Add(this);?
它编译并运行但不能将任何项添加到任何列表中.
一个更好的编译器是否必须通知(小)问题?
它们不是同一个列表.这不是编译器可以为您检查的东西,因为编译器无法真正读懂您的想法.查看文档List<T>.FindAll
结果是一个列表,但它不是相同的列表(它怎么可能?你的原始列表没有被过滤!).
您应该能够将项目添加到返回的列表中FilteredA,除非它们不会显示a.
我建议你使用LINQs Where而是返回一个IEnumerable<T>.这样,显然FilteredA不应该改变结果,只迭代:
public IEnumerable<A> FilteredA
{
get { return EveryA.Where(a => a.IsInFilter); }
}
Run Code Online (Sandbox Code Playgroud)