Здравствуйте, yenik, Вы писали:
J>>Посмотрел по внимательнее, а он вообще что нить кроме typeof(string) вернуть может? Чё то как то совсем плохо
Y>А переменная nbline — что она считает? Если номер строки, то для разных колонок получится разный номер строки.
Ну в принципе да, номер значащей строки. Для них важно определить первая это значащая строка или нет. По мне все это должно выглядеть примерно так: (+/- опечатки, пишу без IDE)
private static Type GuessKind(int col, List<string[]> read)
{
Type previousType = null;
foreach (var line in read)
{
if (col >= line.Length)
throw new FormatException(string.Format(Strings.LessColumnsThatExpected, nbline + 1));
string val = line[col];
if (string.IsNullOrEmpty(val) || string.Equals(val, "null", StringComparison.OrdinalIgnoreCase))
{
continue;
}
var suggestType = bool.TryParse(val, out _) ? typeof(bool)
: float.TryParse(val, out _) ? typeof(float)
: DateTime.TryParse(val, out _) ? typeof(DateTime)
: typeof(string);
if (previousType == null)
{
previousType = suggestType;
}
if (previousType != suggestType || suggestType == typeof(string))
{
return typeof(string);
}
}
return previousType ?? typeof(string);
}
Но на самом деле — самое страшное, что у них походу нету тестов. Ибо простейший тест бы показал, что типы колонок неверно определяются.