将项添加到列表中,但不起作用

Ger*_*ard 0 c# getter list

在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);
它编译并运行但不能将任何项添加到任何列表中.
一个更好的编译器是否必须通知(小)问题?

Dar*_*mas 5

它们不是同一个列表.这不是编译器可以为您检查的东西,因为编译器无法真正读懂您的想法.查看文档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)