gpt4 book ai didi

c# - 以下 c# 代码的含义是什么(链接条件三元运算符)

转载 作者:行者123 更新时间:2023-11-30 20:44:24 24 4
gpt4 key购买 nike

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."
: "";

最佳答案

(列出的代码来自 ASP.Net MVC 5 应用中的脚手架 ManageController)

它是 conditional operator 的链式使用

尽管使用嵌套的 if 语句可以获得相同的结果:

if (message == ManageMessageId.ChangePasswordSuccess)
ViewBag.StatusMessage = "Your password has been changed."
else if (message == ManageMessageId.SetPasswordSuccess)
ViewBag.StatusMessage = "Your password has been set."
...

或 switch 语句

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 查找模式来将 ManageMes​​sageId 值映射到要在 ManageController 的 Viewbag 中设置的字符串,因为这将减少匹配适当键的比较次数:

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."},
// ...
};

等效的映射代码将很简单(仅使用一次条件运算符)- ManageMes​​sageId 是一个枚举:

public async Task<ActionResult> Index(ManageMessageId? message)
{
ViewBag.StatusMessage = (message.HasValue)
? _messageDictionary[message.Value]
: "";

关于c# - 以下 c# 代码的含义是什么(链接条件三元运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29427708/

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