क्या मैं प्रतिबिंब का उपयोग करके गतिशील रूप से नीचे दिखाए गए वर्ग को बना सकता हूं? कोई विधियां नहीं हैं, केवल सार्वजनिक चर, कुछ में कस्टम विशेषताएं हैं।कक्षा बनाने के लिए प्रतिबिंब का उपयोग करें (एक गतिशील फ़ाइलहेल्पर क्लास बनाने के लिए)
क्या स्वीकृति विधि आवश्यक है (मैंने जो देखा है, "एमिट" थोड़ा चुनौतीपूर्ण दिखता है)।
मैं 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: Vlad के जवाब नीचे मैं संदर्भ के लिए 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: इसके अलावा, क्या Vlad सुझाव दिया करने के बाद, यह कैसे मैं फोन है परिणाम के माध्यम से FileHelper और पाश। मैं शायद डेटा को एक सूची में स्थानांतरित कर दूंगा।
Assembly assembly = compiledResult.CompiledAssembly;
// Simple Data Test
lineContents = "John,Doe,[email protected]";
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);
}
पर एक नजर डालें [हैलो, दुनिया ... Reflection.Emit शैली!] (Http://blogs.msdn.com/b/joelpob/archive/2004/01/21/61411.aspx) –
क्या विशेष रूप से डीएलएल या .EXE बनाते हैं? मुझे सिर्फ स्मृति में कक्षा की आवश्यकता है, डिस्क पर सहेजा नहीं गया है। – NealWalters
मैं कह रहा था कि मुझे डिस्क पर सहेजने की आवश्यकता नहीं है। – NealWalters