@UbgFHgMOIgkTrP7Sj8GJ

Как создать объект из строки параметров?

Есть класс такого вида
public class MyClass
    {
        private int Id { get; set; }

        private double X { get; set; }

        private double Y { get; set; }

        private double Z { get; set; }

        private string Name { get; set; }

        private bool Active { get; set; }
}


И есть входная строка
0, 1.1, 1.2, 1.3, name, true

Можно ли как-то создать объект класса MyClass и не конвертировать каждый параметр в соответствующий тип данных при вызове конструктора?
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
edward_freedom
@edward_freedom
Можно конечно. Количество значений должно идти подряд и соответствовать числу свойств в классе.
var data = "0, 1.1, 1.2, 1.3, name, true";
            var myClass = MyClass.Parse(data);
            MyClass.SeeChanges(myClass);


public class MyClass
    {
        private int Id { get; set; }

        private double X { get; set; }

        private double Y { get; set; }

        private double Z { get; set; }

        private string Name { get; set; }

        private bool Active { get; set; }

        public static MyClass Parse(string data)
        {
            var myClass = new MyClass();
            var properties = data.Split(',');

            var props = myClass.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public
       |                                                BindingFlags.Instance | BindingFlags.Static);
            for (int i = 0; i < props.Length; i++)
            {
                var prop = props[i];
                var type = prop.PropertyType;
                prop.SetValue(myClass, Convert.ChangeType(properties[i], type, CultureInfo.InvariantCulture));
            }
            return myClass;
        }

        public static void SeeChanges(MyClass myClass)
        {
            var props = myClass.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public
      |                                                 BindingFlags.Instance | BindingFlags.Static);
            foreach (var prop in props)
            {
                Debug.WriteLine("{0} = {1}", prop.Name, prop.GetValue(myClass, null));
            }

        }
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Только если это будет json. Его можно сериализовать в класс.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Ленивый: любым банальным способом "превратить" строку в json и заниматься сериализацией/десериализаций получившегося json (split и в цикле насрать с stringBuilder, присовокупив открывающие/закрывающие скобки)
Продвинутый: написать свой сериализатор/десериализатор для csv )
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы