等价于C#中的Oracle DECODE函数
本文关键字:DECODE 函数 Oracle 中的 等价于 | 更新日期: 2023-09-27 18:25:00
Oracle 中内置的DECODE函数
decode( expression , search , result [, search , result]... [, default] )
http://www.techonthenet.com/oracle/functions/decode.php
想要C#语言中的类似功能。有内置的方法吗?
我知道我可以使用if-else-if结构或切换,但我需要动态地这样做。如果没有,请分享一些创建一个的逻辑步骤。
谢谢你抽出宝贵的时间。
您正在寻找Dictionary<int, string>
。
这是一个老问题,但由于它被另一个答案从模糊中拉了出来,下面是我如何尝试在C#
中复制decode
函数。不完全一样,但也不算太糟:
public static TOutput Decode<TInput, TOutput>(TInput expression, params Tuple<TInput, TOutput>[] searchResultPairs)
=> DecodeWithDefault(expression, default(TOutput), searchResultPairs);
public static TOutput DecodeWithDefault<TInput, TOutput>(TInput expression, TOutput defaultValue, params Tuple<TInput, TOutput>[] searchResultPairs)
{
foreach(var searchResultPair in searchResultPairs)
{
if ((expression == null && searchResultPair.Item1 == null)
|| (expression != null && expression.Equals(searchResultPair.Item1)))
{
return searchResultPair.Item2;
}
}
return defaultValue;
}
示例用法:
Console.WriteLine(Decode(5, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(Decode(23, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(Decode(6, Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
Console.WriteLine(DecodeWithDefault(6, "not found", Tuple.Create(23, "twenty-three"), Tuple.Create(5, "five")));
输出:
五个
二十三未找到