Я включил функцию C # 8.0 для необнуляемых ссылочных типов в одном из моих проектов, но сейчас мне неясно, как представлять отсутствующие данные.
Например,Я читаю файл, строки которого представляют собой разделенные двоеточиями пары ключ / значение.Иногда в строке более одного двоеточия.В этом случае текст перед первым двоеточием является ключом, а остальное - значением.Мой код для анализа каждой строки выглядит следующим образом:
public (string key, string value) GetKeyValue(string line)
{
var split = line.Split(':');
if (split.Length == 2)
return (split[0].Trim(), split[1].Trim());
else if (split.Length > 2)
{
var joined = string.Join(":", split.ToList().Skip(1));
return (split[0].Trim(), joined.Trim());
}
else
{
Debug.Print($"Couldn't parse this into key/value: {line}");
return (null, null);
}
}
Что это делает: если у нас есть только одна двоеточие, верните ключ и значение.Если у нас их несколько, объедините остальную часть текста после первого двоеточия, а затем верните ключ и значение.В противном случае у нас нет двоеточий и мы не сможем их проанализировать, поэтому вернем нулевой кортеж.(Давайте предположим, что последний случай может быть разумным; я не могу просто выбросить и назвать его плохим файлом.)
Очевидно, что последняя строка получает предупреждение об обнуляемости, если я не изменю объявление на
public (string? key, string? value) GetKeyValue(string line)
Теперь в F # я бы просто использовал тип Option, а в случае без двоеточий я бы возвратил None.
Но в C # нет типа Option.Я мог бы вернуть ("", "")
, но мне кажется, что это не лучше, чем NULL.
В таком случае, какой хороший способ сказать «я ничего не нашел» без использования NULL?