Czy w środowisku wykonawczym można utworzyć klasę z DataTable, w której nazwa ColumnName będzie własnością klasy dynamicznej?Tworzenie klas dynamicznych w języku C#
Odpowiedz
Czytając twoje komentarze, poddaję się twojej podłości. Po prostu użyj Generics: używając pól listy do wygenerowania obiektów. Kod jest dość prosta:
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);
}
}
Za każdym razem, gdy mogę mieć różne kolumny z różnymi nazwami i typami. Czy możesz opowiedzieć mi o swoim wariancie lub pokazać mi spokój kodu? – Polaris
Jeśli masz C# 4 można skorzystać z nowych funkcji dynamiki i ExpandoObject
. Możesz read a tutorial about it here.
To naprawdę niesamowite, co jest możliwe przy użyciu tej technologii! – Erup
z C# 4, można to zrobić
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
Nie polecamy go ani nic, ale to pokazuje, że jest to możliwe.
Świetne narzędzie, ale nie w moim przypadku. Używam frameworka 3.5 – Polaris
Zamierzam zaglądać do ExpandoObject, o którym była mowa (głosowałem za tym rozwiązaniem, ale wydaje mi się łatwiej), ale tak, jest to możliwe. Buduję klasę w jednym z moich projektów, w których narzędzie innej firmy wymaga, aby linia CSV została zdefiniowana jako klasa.
Można zbudować kod (ja wliczone \ r \ n tak, że mogę odczytać kodu wynikowego):
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);
}
... Jak wspomniałem , Gdybym musiał zrobić to jeszcze raz, to zbadałbym ExpandoObject, ale zdecydowanie możliwe jest stworzenie klasy z DataTable. Będziesz musiał przesłuchać nazwy kolumn, aby zbudować swoje pola; mój przykład miał listę nazw kolumn dostarczonych z "," rozdzielonego łańcucha.
Mój przykład pochodzi z bardzo konkretnego przypadku użycia, ale powinien wystarczyć, aby ExpandoObject nie działał dla Ciebie.
- 1. Tworzenie klas dynamicznych w SQLAlchemy
- 2. Tworzenie klas dynamicznych w Jade/Pug
- 3. Tworzenie diagramu klas C++
- 4. Python: tworzenie dynamicznych funkcji
- 5. Wizualizacja klas pochodnych w języku C#
- 6. Tworzenie dynamicznych docstrings w deskryptorze Python
- 7. Tworzenie obiektu DateTime w języku C#Tworzenie kodu DataTime w języku C#
- 8. Tworzenie zapytań dynamicznych i bezpiecznych
- 9. Tworzenie dynamicznych kolejki z Seler
- 10. Tworzenie tablicy JSON w języku C#
- 11. Tworzenie klasy Pythona w języku C#
- 12. Tworzenie instancji bazy danych w języku C#
- 13. Tworzenie instancji niestandardowych klas C# z IronPython
- 14. Tworzenie diagramu klas ze źródła C++?
- 15. Rozszerzanie klas w języku PHP
- 16. Tworzenie diagramu klas automatycznie
- 17. Ponowne tworzenie klas standardowych
- 18. Dynamicznie tworzenie klas - Python
- 19. Tworzenie dynamicznych funkcji Pythona o niestandardowych nazwach
- 20. Dlaczego nie jest możliwe tworzenie klas abstrakcyjnych w celu-c
- 21. tworzenie tablicy, która może przechowywać obiekty różnych klas w C++
- 22. Testowanie klas statycznych i metod w języku C# .NET
- 23. Prawidłowy sposób na tworzenie klas w JavaScript?
- 24. Budowanie dynamicznych wzorców Regex w C#
- 25. Generowanie dynamicznych typów delegatów w C#
- 26. Tworzenie pliku MSMS programu Outlook w języku C#
- 27. Tworzenie łatek Delta Diff dużych plików binarnych w języku C#
- 28. tworzenie bazy danych za pomocą programowania w języku C
- 29. Łatwe tworzenie właściwości, które obsługują indeksowanie w języku C#
- 30. Tworzenie użytkownika usługi Active Directory z hasłem w języku C#
Dlaczego? Co próbujesz zrobić? – SLaks
Masz na myśli zdefiniować nową klasę lub dynamicznie ustawić istniejące właściwości klasy? – JustLoren
Chcę utworzyć nową klasę o nazwach kolumn DataTable – Polaris