Действительно ли возможно во времени выполнения создать класс из DataTable, где ColumnName будет свойствами динамического класса?
Да (с использованием Reflection.Emit), но это плохая идея.
Что вы пытаетесь сделать?
Читая ваши комментарии, я понимаю, что вы имеете в виду. Просто используйте Generics: использование полей списка для создания объектов. код довольно прост:
public class DynClass<T, P>
{
public DynClass()
{
_fields = new Dictionary<T, P>();
}
private IDictionary<T, P> _fields;
public IDictionary<T, P> Fields
{
get { return _fields; }
}
}
public class TestGenericInstances
{
public TestGenericInstances()
{
Client cli = new Client("Ash", "99999999901");
/* Here you can create any instances of the Class.
* Also DynClass<string, object>
* */
DynClass<string, Client> gen = new DynClass<string, Client>();
/* Add the fields
* */
gen.Fields.Add("clientName", cli);
/* Add the objects to the List
* */
List<object> lstDyn = new List<object>().Add(gen);
}
}
Если у вас C # 4, вы можете использовать новую динамическую функцию и ExpandoObject
. Вы можете прочитать руководство по этому поводу здесь .
С C # 4 вы можете сделать это
dynamic foo = new ExpandoObject();
// mimic grabbing a column name at runtime and adding it as a property
((IDictionary<string, object>)foo).Add("Name", "Apple");
Console.WriteLine(foo.Name); // writes Apple to screen
Не рекомендовать это или что-то в этом роде, но он показывает вам, что это возможно.