Как мы можем реализовать сопоставление с образцом для возврата кортежа?
В настоящее время подпись метода
public static string Match(string nodeName, string nodeValue, string sourceParty,
string destinationParty, List<Translation> translations)
ЖелаемыйПодпись метода
public static (string, TypeOfMatch) Match(string nodeName, string nodeValue,
string sourceParty, string destinationParty, List<Translation> translations)
У меня есть следующий статический метод:
public static class Matcher
{
public static string Match(string nodeName, string nodeValue, string sourceParty,
string destinationParty, List<Translation> translations)
{
//please excuse the pseudo code in these 3 lines
var exactMatch = from.translations(where xyz).select.Take(1)
var defaultMatch = from.translations.select(where abc).Take(1)
var anySourceMatch = from.translations.select(where sss).Take(1)
return exactMatch.FirstOrDefault() ??
defaultMatch.FirstOrDefault() ??
anySourceMatch.FirstOrDefault() ??
nodeValue;
}
}
Я хотел бы знать type
соответствия, которое было возвращено (было ли оно точным /default / anySource).
Сейчас мы возвращаем string
, но, возможно, возвращение должно быть кортежем, таким как (TypeOfMatch, string)
, где TypeOfMatch
будет перечислением, таким как:
public enum TypeOfMatch
{
Exact, Default, AnySource
}
но тогда наш оператор возврата будет выглядеть примерно так:
if (exactMatch.FirstOrDefault() != null)
return (TypeOfMatch.Exact, exactMatch.First());
if (defaultMatch.FirstOrDefault() != null)
return (TypeOfMatch.Default, defaultMatch.First());
// etc.
Есть ли более надежный способ сделать switch
, для которой переменная не была нулевой, и затем вернуть пару(TypeOfMatch, string)