Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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#_Linq - Fatal编程技术网

C# 类内自动计算属性

C# 类内自动计算属性,c#,linq,C#,Linq,我有两门课: public class LeadPerformanceItem { public string name { get; set; } public int visitors { get; set; } public decimal visitorspercentoftotal { get { // ? } } } public class LeadPerformanceI

我有两门课:

public class LeadPerformanceItem
{
    public string name { get; set; }

    public int visitors { get; set; }

    public decimal visitorspercentoftotal
    {
        get
        {
        // ?
        }
    }
}

public class LeadPerformanceItemCollection
{
    public List<LeadPerformanceItem> items {get;set;}

    public int totalvisitors
    {
        get
        {
            return items.Sum(x => x.visitors);
        }
    }       
}

在集合中添加和删除项目时,是否可以自动计算my visitorspercentoftotal属性?

一种方法是从列表继承并隐藏Add方法,创建自己的方法并在那里进行计算

public class LeadPerformanceItemCollection : List<LeadPerformanceItem>
{

    public new void Add(LeadPerformanceItem item)
    {
        //calculate percent of total here

        base.Add(item);
    }

}
公共类领导绩效项目 { 公共字符串名称{get;set;} 公共int访问者{get;set;} 私人int_totalVisitors=0; 公共无效更新TotalVisitor总计 { 这._totalVisitors=总计; } 公共十进制访问者SPERCENTOFTOTAL=>\u总访问者!=0 ?Convert.ToDecimalMath.Rounddouble访问者*100/\u总访问者 : 0; } 公共类LeadPerformanceItemCollection { 公共列表项{get;set;} 公共无效添加项SleAdPerformanceItem项 { 项目.补充项目; var total=Items.Sumx=>x.Visitors; Items.aspallel.ForAlli=>i.UpdateTotalVisitorstotal; } 公众访客 { 获取{return Items.Sumx=>x.Visitors;} } } [测试夹具] 公共班级1 { [测试] 公共空隙试验 { var leadPerformanceItemCollection=新leadPerformanceItemCollection; leadPerformanceItemCollection.Items=新列表; leadPerformanceItemCollection.AddToItems新LeadPerformanceItem { 名称=测试, 访客=10 }; leadPerformanceItemCollection.AddToItems新LeadPerformanceItem { name=test2, 访客=25 }; Console.WriteLineAdPerformanceItemCollection.Items[0]。VisitorSpercentOftTotal; Console.WriteLineAdPerformanceItemCollection.Items[1]。VisitorSpercentOftTotal; } } 结果:

29%
71%

为了做到这一点,LeadPerformanceItem需要有访问列表的权限。如果不知道它是否被收集到一个列表中,你怎么能期望它计算呢?相反,你应该给它访问列表的权限,或者只是从LeadPerformanceItemCollection classI给你的解决方案中计算出来,看看我的答案你不能使用内置列表,因为它不是一个可观察的集合。您可以使用该类并订阅其CollectionChanged事件。建议阅读: