如何使用c#中的属性?
我有一门课:如何使用c#中的属性?,c#,C#,我有一门课: public class ViewModel { public string Name { set; get; } public List<SimpleViewModel> Parameters { set { NotDeletedParameters = value.Where(t => !t.Deleted).ToList(); parameters =
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; }
}
公共类视图模型
{
公共字符串名称{set;get;}
公共列表参数
{
设置
{
NotDeletedParameters=value.Where(t=>!t.Deleted).ToList();
参数=值;
}
得到
{
返回参数;
}
}
私有列表参数;
公共视图模型()
{
参数=新列表();
}
公共列表NotDeletedParameters{set;get;}
}
此类中有两个参数列表:parameters
和NotDeletedParameters
如何设置NotDeletedParameters=value.Where(t=>!t.Deleted).ToList()代码>当我设置参数
属性时
使用此代码时,NotDeletedParameters
列表中仍有0个元素。有什么想法吗?NotDeletedParameters列表将为空,因为您正在将新列表设置为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();
}
}
}
公共类视图模型
{
公共字符串名称{set;get;}
公共列表参数
{
设置
{
参数=值;
}
得到
{
返回参数;
}
}
私有列表参数;
公共视图模型()
{
参数=新列表();
}
公共列表NotDeletedParameters{
得到{
返回参数.Where(t=>!t.Deleted).ToList();
}
}
}
您可以通过将NotDeletedParameters设置为动态创建其列表的get-only属性来避免此问题:
public List<SimpleViewModel> NotDeletedParameters
{
get
{
return Parameters.Where(t => !t.Deleted).ToList();
}
}
公共列表不删除参数
{
得到
{
返回参数.Where(t=>!t.Deleted).ToList();
}
}
(我还建议返回IEnumerable而不是List,并将return语句更改为Parameters.Where(t=>!t.Deleted).ToList().AsReadOnly()这看起来没问题,除非我遗漏了什么。您确定value.Where(t=>!t.Deleted).ToList()吗
中有项目吗?是的,我确信值
不是空的。@KliverMax你确信值。Where(t=>!t.Deleted)。ToList()不是空的吗?值
可以是非空的,而值。Where(t=>!t.Deleted)。ToList()
可以为空。旁注:如果NotDeletedParameters完全依赖于与您的问题没有直接关系的参数,我不会授予它公共集访问权限,但请注意,此实现还存在其他问题:例如,如果您使用get-ter作为参数并直接将项添加到列表中,它们将“从后门溜走”并且不会添加到NotDeletedParameters中。(实际上,这可能是您的问题,取决于您如何填写列表。)