позволяет сказать, что у меня есть строка ввода, которую мне нужно форматировать в список из KeyValuePair<string,float>
записей. Формат входной строки являетсяВыбрасывание исключений из исключения Linq Query
key:value;key:value;...
позволяет сказать, что у меня есть это Linq код, чтобы сделать это
var orr = from pco in (overrrides ?? string.Empty).Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries)
let pair = pco.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
select new KeyValuePair<string, float>(pair[0], float.Parse(pair[1]));
Теперь, если входная строка не правильно отформатированный LINQ потерпит неудачу на двух возможных точек, индекс вне диапазона на pair[]
и исключение формата по float.Parse
. Оба этих исключения будут подпрыгивать и ничего не означают для вызывающего.
Я знаю, что у меня есть два метода обхода (не используйте linq и loop как его 1990-е годы или не хватайте выше исключений и переупаковки), однако мне было интересно, могу ли я каким-то образом ввести шаги проверки в сам запрос linq, чтобы выбросить мои собственные исключения, если я обнаруживаю аномалия (pair.length<2
или pair[1]
не число)?
pair.length не будет никакой проблемой - вы можете использовать предложение where. Для float.Parse вы можете попробовать некоторую конструкцию с помощью TryParse, но в этом случае вы должны рассмотреть возможность разбить linq на элементы linq + foreach для удобства чтения;) – TGlatzer
@ J.Steen, правильно, извините, исправлено. – mmix
Не беспокойтесь, просто не хотелось бы, чтобы люди фокусировались на опечатках. =) (как и я!);) –