Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c#中的属性?_C# - Fatal编程技术网

如何使用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中。(实际上,这可能是您的问题,取决于您如何填写列表。)