首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下面c#代码的含义是什么(链接条件三元操作符)

下面c#代码的含义是什么(链接条件三元操作符)
EN

Stack Overflow用户
提问于 2015-04-03 07:03:48
回答 1查看 308关注 0票数 2
代码语言:javascript
复制
ViewBag.StatusMessage =
                message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
                : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
                : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set."
                : message == ManageMessageId.Error ? "An error has occurred."
                : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added."
                : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed."
                : "";
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 07:15:06

(列出的代码来自ASP.Net MVC 5应用程序中的支架式ASP.Net)

这是条件算子的一种链式使用。

虽然嵌套的if语句可以实现相同的结果:

代码语言:javascript
复制
if (message == ManageMessageId.ChangePasswordSuccess)
    ViewBag.StatusMessage = "Your password has been changed."
else if (message == ManageMessageId.SetPasswordSuccess)
    ViewBag.StatusMessage = "Your password has been set."
... 

或开关语句

代码语言:javascript
复制
switch (message)
   case ManageMessageId.ChangePasswordSuccess:
      ViewBag.StatusMessage = "Your password has been changed.";
      break;
   case ManageMessageId.SetPasswordSuccess:
      ViewBag.StatusMessage = "Your password has been set.";
      break;
    ...

以链式方式使用条件运算符可以避免ViewBag.StatusMessage的重复赋值,因为它允许对必须是相同类型的结果进行投影,从而允许单个赋值。它还阻止了在ifswitch语句中可能出现的副作用行为。

编辑,其他替代品

如果排列的数量变得非常大,我将选择一个Dictionary查找模式来将ManageMessageId值映射到要在ManageController的Viewbag中设置的字符串,因为这将减少比较的数量,以便匹配适当的键:

代码语言:javascript
复制
private static readonly IDictionary<ManageMessageId, string> _messageDictionary 
= new Dictionary<ManageMessageId, string>
  {
      {ManageMessageId.ChangePasswordSuccess, "Your password has been changed."},
      {ManageMessageId.SetPasswordSuccess, "Your password has been set."},
      // ...
  };

然后,等效的映射代码将是简单的(只使用一次条件运算符)-- ManageMessageId是一个枚举:

代码语言:javascript
复制
public async Task<ActionResult> Index(ManageMessageId? message)
{
   ViewBag.StatusMessage = (message.HasValue)
      ? _messageDictionary[message.Value]
      : "";
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29427708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档