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事件。建议阅读: