2016-02-04 28 views
-1

我有一个类:如何使用c#中的属性?

public class ViewModel 
{ 
    public string Name { set; get; } 

    public List<SimpleViewModel> Parameters 
    { 
     set 
     { 
      NotDeletedParameters = value.Where(t => !t.Deleted).ToList(); 
      parameters = value; 
     } 
     get 
     { 
      return parameters; 
     } 
    } 

    private List<SimpleViewModel> parameters; 

    public ViewModel() 
    { 
     Parameters = new List<SimpleViewModel>(); 
    } 

    public List<SimpleViewModel> NotDeletedParameters{ set; get; } 
} 

有很多这类参数表2列出:ParametersNotDeletedParameters。如何设置NotDeletedParameters = value.Where(t => !t.Deleted).ToList();当我设置Parameters属性。

当我使用此代码时,NotDeletedParameters列表中仍然有0个元素。有任何想法吗?

+5

这看起来不错,除非我错过了某些东西。你确定'value.Where(t =>!t.Deleted).ToList()'中有条目吗? – adv12

+0

是的,我确定'value'不是空的。 –

+0

您是否尝试过调试您的代码?你想把什么分配给'Parameters'? –

回答

2

NotDeletedParameters列表将为空,因为您正在设置一个新的List to Parameters属性,该属性可能没有删除参数。编辑参数的列表项目以设置已删除的参数时,NotDeletedParameters列表将不会更新,因为它具有在参数初始化期间分配的自己的副本。

所以,而是在NotDeletedParameter中返回过滤参数列表。

public class ViewModel 
{ 
    public string Name { set; get; } 

    public List<SimpleViewModel> Parameters 
    { 
     set 
     { 
      parameters = value; 
     } 
     get 
     { 
      return parameters; 
     } 
    } 

    private List<SimpleViewModel> parameters; 

    public ViewModel() 
    { 
     Parameters = new List<SimpleViewModel>(); 
    } 

    public List<SimpleViewModel> NotDeletedParameters{ 
     get { 
       return parameters .Where(t => !t.Deleted).ToList(); 
      } 
    } 
} 
1

你或许可以避开这个问题,通过使NotDeletedParameters创建的列表中只获得属性上即时:

public List<SimpleViewModel> NotDeletedParameters 
{ 
    get 
    { 
     return Parameters.Where(t => !t.Deleted).ToList(); 
    } 
} 

(我也建议返回,而不是一个列表一个IEnumerable ,并将返回语句更改为Parameters.Where(t =>!t.Deleted).ToList()。AsReadOnly()

相关问题