0

Oracle中的DECODE内置函数

decode( expression , search , result [, search , result]... [, default] )

http://www.techonthenet.com/oracle/functions/decode.php

想要 C# 语言中的类似功能。任何内置方法?

我知道我可以使用 if else if 结构或 switch,但是我需要动态地执行它。如果不存在,请分享一些逻辑步骤来创建一个。

感谢您的宝贵时间。

4

2 回答 2

2

您正在寻找一个Dictionary<int, string>.

于 2013-07-25T02:44:25.357 回答
1

一个老问题,但由于它被另一个答案从默默无闻中拉了出来,这就是我将如何尝试decodeC#. 不完全一样,但也不算太糟糕:

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")));

输出:

五点
二十三

未找到

于 2016-07-14T14:16:57.267 回答