Это действительно сложно; если вы абсолютно хотели сделать это как классы времени выполнения, вам нужно посмотреть на TypeBuilder
и т. д. Честно говоря, если вы уже не знакомы с этим, или это действительно важно, это, вероятно, не стоит. Не в последнюю очередь: вы не можете кодировать такие объекты, кроме как object
.
Ваш лучший выбор может заключаться в использовании каких-либо DOM (XmlDocument
, XElement
и т. Д.) Для считывания данных, но, возможно, заселить DataTable
. Я не очень большой поклонник DataTable
в обычном коде, но он существует и прекрасно подходит для этого сценария.
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
DataTable table = new DataTable();
foreach(XmlElement child in doc.DocumentElement.SelectNodes("column"))
{
table.Columns.Add(child.InnerText, ParseType(child.GetAttribute("Type")));
}
....
static Type ParseType(string type)
{
switch(type)
{
case "String": return typeof(string);
case "Int32": return typeof(int);
default: throw new NotSupportedException(type ?? "(null)");
}
}
Дженерики в основном о том, чтобы узнать больше информации о типе в * время компиляции *. Если вы только знаете информацию о типе во время выполнения, неясно, какая польза там будет. Пожалуйста, дайте более подробную информацию о том, что вы пытаетесь * сделать * с этой информацией. –
Что вы пытаетесь достичь? Если у вас есть классы, сгенерированные во время выполнения, остальная часть вашего приложения все еще не знает их и, следовательно, не может их использовать. – Maarten
Вы действительно имеете в виду, что не знаете столбцы во время выполнения? Или во время компиляции? –