Возможно ли во время выполнения создать класс из DataTable, где ColumnName будет свойствами динамического класса?Создание динамического класса в C#
ответ
Да (с использованием Reflection.Emit), но это плохая идея.
Что вы пытаетесь сделать?
Читая ваши комментарии, я обнаружил, что вы имеете в виду. Просто используйте Generics: используя поля List для генерации объектов. Код довольно прост:
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);
}
}
Каждый раз, когда у меня могут быть разные столбцы с разными именами и типами. Можете ли вы рассказать мне о своем варианте в деталях или показать мне мир кода? – Polaris
Если у вас есть C# 4 вы можете использовать новую динамику имеют и ExpandoObject
. Вы можете read a tutorial about it here.
Его действительно невероятно, что можно использовать с помощью этой технологии! – Erup
С # 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
Не рекомендовать его или что-нибудь, но это показывает, что это возможно.
отличный инструмент, но не в моем случае. Я использую framework 3.5 – Polaris
Я собираюсь посмотреть в ExpandoObject, о котором упоминалось (я проголосовал за это решение, как мне кажется, проще), но да, это возможно. Я строю класс в одном из моих проектов, где сторонняя утилита требует, чтобы строка CSV определялась как класс.
Вы можете создать код (я включил \ г \ п, так что я мог читать результирующий код):
string code = "using FileHelpers;\r\n\r\n";
code += "[DelimitedRecord(\"" + delimiter + "\")]\r\n";
code += "public class CustomCSVInputFile ";
code += "{ \r\n";
foreach (string column in columnList)
{
code += " public string " + column.Replace(" ", "") + ";\r\n";
}
code += "}\r\n";
CompilerResults compilerResults = CompileScript(code);
...
public static CompilerResults CompileScript(string source)
{
CompilerParameters parms = new CompilerParameters();
FileHelperEngine engine;
parms.GenerateExecutable = false;
parms.GenerateInMemory = true;
parms.IncludeDebugInformation = false;
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:\\", "").Trim();
parms.ReferencedAssemblies.Add(Path.Combine(path, "FileHelpers.dll"));
CodeDomProvider compiler = CSharpCodeProvider.CreateProvider("CSharp");
return compiler.CompileAssemblyFromSource(parms, source);
}
... Как я уже говорил , Если бы мне пришлось сделать это снова, я бы исследовал ExpandoObject, но, безусловно, возможно создать класс из DataTable. Вам нужно будет допросить имена столбцов для создания ваших полей; в моем примере был список имен столбцов, предоставленных из строки с разделителями «,».
Мой пример из очень конкретного варианта использования, но этого должно быть достаточно, чтобы вы могли работать, если ExpandoObject не работает для вас.
- 1. Создание динамического класса names.OnlyJS
- 2. Создание динамического класса в Objective-C
- 3. Создание динамического класса в php
- 4. Создание динамического класса
- 5. Создание динамического класса - Java
- 6. Создание динамического класса в Java
- 7. динамического создание класса в Python
- 8. Создание динамического класса в actionscript
- 9. Создание динамического класса в SQLAlchemy
- 10. Создание динамического объекта в C++?
- 11. Создание динамического шаблона C++
- 12. Создание динамического массива абстрактного класса
- 13. Создание динамического типа в C++
- 14. Python создание имени динамического класса
- 15. Javascript Создание динамического класса объектов
- 16. Создание класса для динамического XML
- 17. Создание динамического вектора C++
- 18. Объектив c Создание динамического объекта
- 19. Создание динамического массива в c
- 20. Создание динамического массива класса в Java
- 21. Создание динамического массива динамических объектов в C++
- 22. Наследование класса Python: создание динамического атрибута
- 23. Создание динамического поддельного класса внутри сборки
- 24. Создание динамического массива Objective C
- 25. Создание динамического интерфейса с C#?
- 26. создание динамического массива строки C++
- 27. Создание динамического массива C generic
- 28. Создание класса в C#
- 29. Создание динамического класса с типом и __slots__?
- 30. Создание динамического массива с указателями класса
Почему? Что ты пытаешься сделать? – SLaks
Вы имеете в виду определение нового класса или динамическое определение существующих свойств класса? – JustLoren
Я хочу создать новый класс с именами столбцов dataTable – Polaris