как реализовать подобное?
От: Kaifa Россия  
Дата: 22.02.18 12:35
Оценка:
раньше не приходилось сталкиваться

пусть есть какой-то класс, содержащий в принципе какие угодно поля (про поля, кроме того, что они простых типов (ну типа int, string и т.п.) (без методов (конструктор не в счет))
нужно написать генератор большого количества значений полей этого класса. например что-то типа этого:

class gen<T>
{
    List<T> gen();
}


как это реализуется? если можно с несложным примером.
Re: как реализовать подобное?
От: Mihas  
Дата: 22.02.18 12:59
Оценка: +1
Здравствуйте, Kaifa, Вы писали:

Рефлекшн смотрел?
Определяешь тип Т.
Делаешь switch, который в зависимости от типа генерирует "большое количество значений" этого типа.
Простых типов не так много, нетрудно все охватить.
Re: как реализовать подобное?
От: karbofos42 Россия  
Дата: 22.02.18 13:17
Оценка: 2 (1)
Здравствуйте, Kaifa, Вы писали:

K>раньше не приходилось сталкиваться


K>пусть есть какой-то класс, содержащий в принципе какие угодно поля (про поля, кроме того, что они простых типов (ну типа int, string и т.п.) (без методов (конструктор не в счет))

K>нужно написать генератор большого количества значений полей этого класса. например что-то типа этого:

K>
K>class gen<T>
K>{
K>    List<T> gen();
K>}
K>


K>как это реализуется? если можно с несложным примером.


Создать объект класса:
var obj = Activator.CreateInstance<T>();

Если нужно вызывать конструктор с параметрами, то есть соответствующий вариант метода.

работать с полями можно через рефлекшен:
foreach (var f in typeof(T).GetFields()) // все поля класса Т
{
  object value;
  if (f.FieldType == typeof(int))
  {
    value = 42; // генерируем какое-то значение для int
  }
  else if (f.FieldType == typeof(string))
  {
    value = "string42";
  }
  ...
  f.SetValue(obj, value); // устанавливаем значение поля
}

ну или по аналогии через GetProperties или более общий GetMembers, если нужны не только поля, но и свойства.
Re: как реализовать подобное?
От: Mr.Delphist  
Дата: 22.02.18 15:02
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>раньше не приходилось сталкиваться


K>пусть есть какой-то класс, содержащий в принципе какие угодно поля (про поля, кроме того, что они простых типов (ну типа int, string и т.п.) (без методов (конструктор не в счет))

K>нужно написать генератор большого количества значений полей этого класса. например что-то типа этого:

K>
K>class gen<T>
K>{
K>    List<T> gen();
K>}
K>


K>как это реализуется? если можно с несложным примером.


Нагенерить XML или json и создать десериализатором на основе этих данных?
Или поюзать кодогенерацию на том же, прости-хосспади, T4 engine?
Re[2]: как реализовать подобное?
От: Kaifa Россия  
Дата: 22.02.18 15:11
Оценка:
MD>Нагенерить XML или json и создать десериализатором на основе этих данных?
MD>Или поюзать кодогенерацию на том же, прости-хосспади, T4 engine?

я не понял что ты только что сказал
Re: как реализовать подобное?
От: Vladek Россия Github
Дата: 23.02.18 21:52
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>раньше не приходилось сталкиваться


K>пусть есть какой-то класс, содержащий в принципе какие угодно поля (про поля, кроме того, что они простых типов (ну типа int, string и т.п.) (без методов (конструктор не в счет))

K>нужно написать генератор большого количества значений полей этого класса. например что-то типа этого:

Заполнить поля объектов какими-то данными или мусором? https://github.com/bchavez/Bogus
Re: как реализовать подобное?
От: RushDevion Россия  
Дата: 23.02.18 22:53
Оценка:
K>нужно написать генератор большого количества значений полей этого класса. например что-то типа этого:
Если это нужно по работе (тест-объекты, например, генерить), а не для самообразования, то
я бы посоветовал на AutoFixture посмотреть.
var fixture = new Fixture();
var sut = fixture.Create<MyClass>();
var collection = fixture.CreateMany<MyAnotherClass>();
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.