Могу ли я построить класс, как показано ниже, динамически, используя отражение?Нет методов, только публичные переменные, некоторые имеют пользовательские атрибуты.
Требуется ли метод .Emit (из того, что я видел, "Emit" выглядит немного сложным).
Я использую программное обеспечение от www.FileHelpers.net , и для него требуется класс.Все мои определения файлов находятся в таблице базы данных, и я хотел бы сделать все более динамичным (т.е. никакой код не изменяется, когда в файле появляется новый столбец).
[FileHelpers.DelimitedRecord(",")]
public class FileRow
{
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_First_Name;
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_Last_Name;
public string Borrower_Email;
}
Обновление 1: на основании приведенного ниже ответа Влада мне нужно было сослаться на DLL, вот как я это сделал:
// need to reference the FileHelpers.dll from our own .exe directory
string diskFilenameFileHelpersDLL =
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location) +
@"\FileHelpers.dll";
Обновление 2: Кроме того, после выполнения того, что Влад предложилВот как я вызываю FileHelper и перебираю результаты.Я, вероятно, перенесу данные в список.
Assembly assembly = compiledResult.CompiledAssembly;
// Simple Data Test
lineContents = "John,Doe,jd123456@yahoo.com";
FileHelperEngine engine = new FileHelperEngine(assembly.GetType("FileRow"));
// FileRow[] FileRowArray = (FileRow[])engine.ReadString(lineContents);
Object[] FileRowArray = engine.ReadString(lineContents);
Object myObject = FileRowArray[0]; // only 1 row of data in this example
// Get the type handle of a specified class.
Type myType = assembly.GetType("FileRow");
// Get the fields of the specified class.
FieldInfo[] myField = myType.GetFields();
Console.WriteLine("\nDisplaying fields values:\n");
for (int i = 0; i < myField.Length; i++)
{
Object objTest = myField.GetValue(i);
string tempName = myField[i].Name;
Object objTempValue = myField[i].GetValue(myObject);
string tempValue = System.Convert.ToString(objTempValue);
Console.WriteLine("The value of {0} is: {1}",
tempName, tempValue);
}