C# 如何检查委托在方法内部是否返回true?
我正试图解决考试中的一项任务,但我遇到了与代表的问题。任务要求我为FoodTraker类定义一个方法,该类将C# 如何检查委托在方法内部是否返回true?,c#,methods,delegates,C#,Methods,Delegates,我正试图解决考试中的一项任务,但我遇到了与代表的问题。任务要求我为FoodTraker类定义一个方法,该类将Func类型的委托作为参数,并从列表中删除满足委托条件的所有部分。另外,在主要测试中,通过给该方法提供一个参数来测试代码,该方法将过滤价格大于每重量30美元的所有部分 public class Portion { public Portion(decimal price, double weight, double kcal) {
Func
类型的委托作为参数,并从列表中删除满足委托条件的所有部分。另外,在主要测试中,通过给该方法提供一个参数来测试代码,该方法将过滤价格大于每重量30美元的所有部分
public class Portion
{
public Portion(decimal price, double weight, double kcal)
{
Price = price;
Weight = weight;
Kcal = kcal;
}
public decimal Price { get; private set; }
public double Weight { get; private set; }
public double Kcal { get; private set; }
}
public class FoodTracker
{
public List<Portion> portions;
public Func<Portion, bool> PortionDelegate;
public FoodTracker()
{
portions = new List<Portion>();
}
public void Track(Portion portion)
{
portions.Add(portion);
}
public virtual Decimal CalculateProfit()
{
Decimal sum = 0;
foreach(var portion in portions)
{
sum += portion.Price;
}
return sum;
}
public void PortionRemover(Func<Portion,bool> portionDelegate)
{
portions.Remove(portion);
}
}
public class Program
{
static void Main(string[] args)
{
Portion portion1 = new Portion(10m, 500, 1000);
Portion portion2 = new Portion(20m, 200, 200);
Portion portion3 = new Portion(5m, 50, 500);
Portion portion4 = new Portion(30m,1000, 700);
NutritionalTracker tracker = new NutritionalTracker(699, 501);
List<Portion> portions = new List<Portion>();
tracker.Track(portion1);
tracker.Track(portion2);
tracker.Track(portion3);
tracker.Track(portion4);
portions.Add(portion1);
portions.Add(portion2);
portions.Add(portion3);
portions.Add(portion4);
Console.WriteLine(tracker.CalculateProfit());
}
公共类部分
{
公共部分(十进制价格、双倍重量、双倍千卡)
{
价格=价格;
重量=重量;
Kcal=Kcal;
}
公共十进制价格{get;private set;}
公共双权重{get;私有集;}
公共双Kcal{get;私有集;}
}
公营食品零售商
{
公开列表部分;
公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署公署;
公共食品零售商()
{
部分=新列表();
}
公共无效轨道(部分)
{
部分。添加(部分);
}
公共虚拟十进制CalculateProfit()
{
十进制和=0;
foreach(部分中的var部分)
{
总和+=部分价格;
}
回报金额;
}
公共无效端口移除器(Func PortionElegate)
{
部分。移除(部分);
}
}
公共课程
{
静态void Main(字符串[]参数)
{
部分1=新部分(10米、500米、1000米);
第2部分=新的部分(20米、200米、200米);
第3部分=新部分(5m,50500);
第4部分=新部分(30米、1000米、700米);
NutritionalTracker=新的NutritionalTracker(699501);
列表部分=新列表();
tracker.Track(第1部分);
tracker.Track(第2部分);
tracker.Track(第3部分);
tracker.Track(第4部分);
部分。添加(第1部分);
部分。添加(第2部分);
部分。添加(第3部分);
部分。添加(第4部分);
Console.WriteLine(tracker.CalculateProfit());
}
我的第一个问题是,我不知道如何检查方法中委托的bool条件,这导致我无法完成剩余的任务。您可以这样删除 在使用块上添加Linq扩展函数
使用System.Linq;
更改筛选列表的方法并进行设置
public void PortionRemover(Func<Portion, bool> portionDelegate)
{
portions = portions.Where(portionDelegate).ToList();
}
var result=portionelegate.Invoke(部分);
或var result=portionelegate(部分);
partments.RemoveAll(portionelegate)
?不清楚您真正想要的是哪个函数/代码行。@Andy我不确定这对我有什么帮助可能我只是妄想或者您不理解我的问题。还有Charlieface我从来没有打算使用RemoveAll。我首先做的是foreach(部分中的var部分){if(PortionDelegate==true){partitions.Remove(部分)}
但这显然是不正确的。尽管我不怀疑解决方案的正确性,但我认为我不允许在该任务中使用Linq,因此如果可能,最好是不使用Linq的解决方案。此外,我还需要按价格/权重>30对其进行筛选。
FoodTracker tracker = new FoodTracker();
tracker.PortionRemover(p => p.Price > 30);