gpt4 book ai didi

c# - 委托(delegate)字典模式的默认值

转载 作者:太空狗 更新时间:2023-10-29 19:55:53 25 4
gpt4 key购买 nike

考虑这段代码:

switch (number)
{
case 1:
Number = (int)SmsStatusEnum.Sent;
break;
case 2:
Number = (int)SmsStatusEnum.Delivered;
break;
case 3:
Number = (int)SmsStatusEnum.Failed;
break;
default:
Number = (int)SmsStatusEnum.Failed;
break;
}
return Number;

我有一个具有默认值的 switch case。因此,如果 number 不是 1,2 或 3,结果将是 Failed。所以我将代码转换为委托(delegate)字典:

var statuses = new Dictionary<int, Func<SmsStatusEnum>>
{
{1,()=> SmsStatusEnum.Sent},
{2,()=> SmsStatusEnum.Delivered},
{3,()=> SmsStatusEnum.Failed},
};

如何为委托(delegate)字典模式设置默认值?

最佳答案

要设置默认值,您只需包装 Dictionary在函数中

SmsStatusEnum GetStatus(int value) { 
Func<SmsStatusEnum> func;
if (!statuses.TryGetValue(value, out func)) {
// Default value
return SmsStatusEnum.Failed;
}
return func();
}

在这种情况下,虽然我不太明白你为什么要存储 Func<SmsStatusEnum>这里。实际代码是否涉及 Func<SmsStatusEnum> 中的计算?执行?如果是这样,那么这确实是一个很好的模式。如果不是,那么您可能需要考虑只存储一个 Dictionary<int, SmsStatusEnum>直接

关于c# - 委托(delegate)字典模式的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21846088/

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