Как мне разобрать строку для пар ключ-значение без разделителей? - PullRequest
0 голосов
/ 01 октября 2019

Как мне разобрать строку в C #, чтобы извлечь пары ключ-значение без разделителей между ключом и значением?

У меня есть строка, которая выглядит следующим образом

string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969"

После разделенияon \ n Я получаю коллекцию строк, которая выглядит как

string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.]

Я хочу пройтись по массиву split из этих строк и извлечь пару ключ-значение из каждой отдельной строки, чтобы я мог заполнитьсвойства объекта, такие как ...

Person person = new Person() 
{ FIRSTNAME = JOHN,
  LASTNAME = SMITH,
  etc...
}

Какой самый чистый способ сделать это? Спасибо!

1 Ответ

4 голосов
/ 01 октября 2019

Вы можете создать класс с такими свойствами, затем получить свойства объекта с помощью отражения (чтобы мы могли использовать цикл), разделить строку на символ \n, затем для каждого свойства и для каждого параметра, если настройка начинается с имени свойства, установите значение свойства на основе остальной части строки настройки.

Например:

class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string BirthDate { get; set; }

    public override string ToString()
    {
        return $"{FirstName} {LastName}, born on {BirthDate}, lives at: {Address}";
    }
}

public class Program
{
    static void Main(string[] args)
    {
        string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969";
        var user = new User();
        var properties = typeof(User).GetProperties();
        var settings = str.Split('\n');

        foreach (var property in properties)
        {
            foreach (var setting in settings)
            {
                if (setting.StartsWith(property.Name, StringComparison.OrdinalIgnoreCase))
                {
                    property.SetValue(user, setting.Substring(property.Name.Length));
                    break;
                }
            }
        }

        Console.WriteLine(user);

        GetKeyFromUser("\n\nDone! Press any key to exit...");
    }
}

Вывод

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...