Я создал следующий базовый c пример, чтобы показать проблему, которая у меня возникла. Как видите, класс User имеет конструктор, который принимает 3 аргумента (camelCase).
При разборе строк область никогда не отображается. Как получить регион для сопоставления, нужно ли указать конкретный параметр конфигурации c? Мне потребовалось время, чтобы выяснить имена заголовков, необходимые для соответствия верблюжьему корпусу конструктора!
class Program
{
class User
{
public User(string firstName, string lastName, string email)
{
if (string.IsNullOrWhiteSpace(firstName))
{
throw new ArgumentNullException(nameof(firstName));
}
if (string.IsNullOrWhiteSpace(lastName))
{
throw new ArgumentNullException(nameof(lastName));
}
if (string.IsNullOrWhiteSpace(email))
{
throw new ArgumentNullException(nameof(email));
}
FirstName = firstName;
LastName = lastName;
Email = email;
}
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string Email { get; private set; }
public string Region { get; set; }
}
static void Main(string[] args)
{
var s = new StringBuilder();
s.AppendLine("email,firstName,lastName,Region");
s.AppendLine("billy@bob.com,me,jerk,UK");
s.AppendLine("you@u.com,me,fork,USA");
using var reader = new StringReader(s.ToString());
using var csv = new CsvReader(reader, CultureInfo.InvariantCulture);
var records = csv.GetRecords<User>();
foreach (var user in records)
{
Console.WriteLine($"Parsing row: {csv.Context.Row}");
Console.WriteLine($"Email: {user.Email}");
Console.WriteLine($"First Name: {user.FirstName}");
Console.WriteLine($"Last Name: {user.LastName}");
Console.WriteLine($"Region: {user.Region}");
}
}
}
выдает следующий вывод
Parsing row: 2
Email: billy@bob.com
First Name: me
Last Name: jerk
Region:
Parsing row: 3
Email: you@u.com
First Name: me
Last Name: fork
Region:
Я также поднял вопрос о GitHub .