古い質問ですが、別の回答によってあいまいさから引き出されたので、 でdecode
関数を複製しようとする方法を次に示しますC#
。まったく同じではありませんが、それほど悪くはありません。
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")));
出力:
五
二三
見つかりません