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

У меня есть строка, которая выглядит так

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

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

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

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

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

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

-1
zjc2653 1 Окт 2019 в 01:19

1 ответ

Лучший ответ

Вы можете создать класс, который имеет те свойства, то получите свойства объекта посредством отражения (поэтому мы можем использовать цикл), разделить строку на символ \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

4
Rufus L 1 Окт 2019 в 02:10