加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C#中的方法链中选择两种不同方法之一

发布时间:2020-12-16 02:01:59 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: decimal userPrice = product.Status == ProductStatusEnum.Presale ? pricingHelper.GetUserPresalePricing(sku,user).UserCustomPrice : pricingHelper.GetUserProductPricing(sku,user).UserCustomPrice; 有没有办法放置表达式来确定在
请考虑以下代码:

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

有没有办法放置表达式来确定在方法链中使用哪个方法而不必使用两个完整的方法链?我的想法是使用委托或者使用反射通过名称来调用,但这些都不是我合理的解决方案(特别是通过名字调用).

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

在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读