gpt4 book ai didi

c# - 在 C# 的方法链中选择两个不同方法之一

转载 作者:行者123 更新时间:2023-11-30 14:10:26 25 4
gpt4 key购买 nike

考虑以下代码:

decimal userPrice = product.Status == ProductStatusEnum.Presale
? pricingHelper.GetUserPresalePricing(sku, user).UserCustomPrice
: pricingHelper.GetUserProductPricing(sku, user).UserCustomPrice;

有没有什么方法可以将决定使用哪个方法的表达式放在方法链中,而不必使用两个完整的方法链?我的想法是使用委托(delegate)或使用反射按名称调用,但我认为这些都不是合理的解决方案(尤其是按名称调用)。

我意识到在这种情况下方法链并不长(之后只有一个属性),但想象一下方法链更长的场景。我喜欢方法链接而不是创建大量变量,但是,为了清晰起见,在一个长方法链中,像这样在方法使用上存在差异,我会选择变量中的临时存储而不是重复自己。但一定要这样吗?

在 javascript 中这会很简单:

var userPrice = pricingHelper[
product.Status === ProductStatusEnum.Presale
? GetUserPresalePricing
: GetUserProductPricing
](sku, user).UserCustomPrice;

此外,也许将两种方法之一放入一个变量中,然后使用该变量,如(错误的伪代码)所示:

SomeDelegate = product.Status == ProductStatusEnum.Presale
? pricingHelper.GetUserPresalePricing
: pricingHelper.GetUserProductPricing;

decimal userPrice = SomeDelegate(sku, user).UserCustomPrice;

鉴于 C# 可以完成函数式语言可以完成的大多数事情,因此必须有一种方法(并不是说它一定比上面的起始代码更好,只是想知道)。

也欢迎您评论这样的构造是否有用或比原始代码更清晰。

我又想到了一个想法,那就是在 pricingHelper 类中,我可以创建一个 GetUserPricing 方法,该方法采用一个参数来指示是否获得预售或产品价钱。嗯……

最佳答案

var f = product.Status == ProductStatusEnum.Presale
? new Func<Sku, User, CustomPrice>(pricingHelper.GetUserPresalePricing)
: pricingHelper.GetUserProductPricing;

decimal userPrice = f(user, price).UserCustomPrice;

关于c# - 在 C# 的方法链中选择两个不同方法之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23940774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com