C#中的Oracle DECODE函数的等价物

时间:2013-07-25 02:42:34

标签: c#

DECODE在Oracle中内置函数

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

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

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

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

感谢您宝贵的时间。

2 个答案:

答案 0 :(得分:2)

您正在寻找Dictionary<int, string>

答案 1 :(得分: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")));

输出:

  

5个
  二十三。

     

未找到