2012-06-20 12 views
7

युक्त स्ट्रिंग का उपयोग करके एक चर का उपयोग करना मैं डेटाबेस से एक स्ट्रिंग चर का नाम पढ़ रहा हूं (उदा। "_datafile")। मैं जानना चाहता हूं कि मैं इस स्ट्रिंग का उपयोग करके अपने प्रोग्राम के भीतर एक नामित चर का उपयोग कैसे कर सकता हूं।वेरिएबल के नाम

मैंने पहले से ही एक डिक्शनरी, हैश टेबल और स्विच-केस कथन का उपयोग करने का प्रयास किया है, लेकिन मैं वैरिएबल को गतिशील रूप से हल करना चाहता हूं। क्या यह संभव है?

+4

आपका प्रश्न स्पष्ट नहीं है। क्या आप कुछ कोड दिखा सकते हैं? आपने स्विच-केस कथन और एक शब्दकोश का उपयोग कैसे किया है, और गतिशील रूप से * हल करके आपका क्या मतलब है? –

+1

_datafile 'बनने के लिए '_datafile" से आपका क्या मतलब है? –

+0

यहां परिभाषा परिभाषा के साथ एक कोड स्निपेट है (rdr.Read()) { स्ट्रिंग चरण = rdr.GetString (rdr.GetOrdinal ("चरण")); स्ट्रिंग टैग = rdr.GetValue (rdr.GetOrdinal ("टैग"))। ToString(); स्ट्रिंग मान = rdr.GetValue (rdr.GetOrdinal ("मान"))। ToString(); AddDataToWorkflow (चरण, टैग, खोज डिक्शनरी (मान)); } –

उत्तर

0

आमतौर पर आप एक तालिका रिकॉर्ड के मानों का प्रतिनिधित्व करने वाली कक्षा बनाते हैं। अपनी मेज एक ID एक FirstName और एक LastName स्तंभ है, तो आप इस

public class Person 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

की तरह एक वर्ग बन जाएगा तो फिर तुम अब आप सूची में व्यक्तियों में जोड़ सकते हैं व्यक्तियों

var people = new List<Person>(); 

की एक सूची बना।

var p = new Person(); 
p.ID = 5; 
p.FirstName = "John"; 
p.LastName = "Doe"; 
people.Add(p); 

आप क्रम में किसी DataReader का उपयोग एक मेज

string sql = "SELECT * FROM tblPerson WHERE LastName LIKE @pattern"; 
cmd = new SqlCommand(sql); 
cmd.Connection = "server=test;uid=sa;pwd=manager;database=northwind"; 
cmd.Parameters.AddWithValue("@pattern", "A%"); // Names beginning with "A" 
using (SqlDataReader reader = cmd.ExecuteReader()) { 
    // Get column indexes 
    int idOrdinal = reader.GetOrdinal("ID"); 
    int firstNameOrdinal = reader.GetOrdinal("FirstName"); 
    int lastNameOrdinal = reader.GetOrdinal("LastName"); 

    while(reader.Read()) { 
     var p = new Person(); 
     p.ID = reader.GetInt32(idOrdinal); 
     p.FirstName = reader.GetString(firstNameOrdinal); 
     p.LastName = reader.GetString(lastNameOrdinal); 
     people.Add(p); 
    } 
} 
+0

यह पूरी तरह से स्पष्ट नहीं है, लेकिन मुझे लगता है कि यह प्रश्न वास्तव में प्रतिबिंब के बारे में है, डेटाबेस पहुंच नहीं ... –

4

तुम्हारा मतलब आप एक क्षेत्र स्ट्रिंग के रूप फ़ील्ड नाम का उपयोग करने का मूल्य प्राप्त करना चाहते हैं से पढ़ने के लिए कर सकते हैं?

public class MyClass 
{ 
    public string _datafile; 

    public MyClass() 
    { 
     _datafile = "Hello"; 
    } 

    public void PrintField() 
    { 
     var result = this.GetType().GetField("_datafile").GetValue(this); 
     Console.WriteLine(result); // will print Hello 
    } 
} 

संपादित करें: @Rick, आपकी टिप्पणी का जवाब करने के लिए:

public class MyClass 
{ 
    public IEnumerable<string> _parameters = new[] { "Val1", "Val2", "Val3" }; 

    public void PrintField() 
    { 
     var parameters = this.GetType().GetField("_parameters").GetValue(this) as IEnumerable; 

     // Prints: 
     // Val1 
     // Val2 
     // Val3 
     foreach(var item in parameters) 
     { 
      Console.WriteLine(item); 
     } 
    } 
} 
+0

यह आंशिक रूप से सार्वजनिक स्थिर स्ट्रिंग _dataFile काम कर रहा है; स्ट्रिंग मान = rdr.GetValue (rdr.GetOrdinal ("मान"))। ToString(); स्ट्रिंग परिणाम = this.GetType()। GetField (मान, बाइंडिंगफ्लैग्स .ऑनपब्लिक | बाइंडिंगफ्लैग्स। इंस्टेंस | बाइंडिंगफ्लैग्स। स्टेटिक | बाइंडिंगफ्लैग्स.पब्लिक) .GetValue (यह)। ToString(); यह एकवचन चर के साथ काम करता है, अब मुझे इसे संग्रह के साथ काम करने के लिए प्राप्त करना है उदाहरण के लिए: _parameters नामक डेटा का संग्रह मैं _parameters को हल करने के लिए देख रहा हूं। आदि से –

+0

क्या उपर्युक्त संपादन आपके प्रश्न का उत्तर देता है? –

2

आप एक क्षेत्र में अपनी स्ट्रिंग नाम के आधार पर आप प्रतिबिंब का उपयोग करना होगा का मूल्य प्राप्त करना चाहते हैं।

class MyClass 
{ 
    public int DataFile { get; set; } 

    public int _datafile; 
} 

var ob = new MyClass(); 
var typ = typeof(MyClass); 
var f = typ.GetField("_datafile"); 
var prop = typ.GetProperty("DataFile"); 
var val = f.GetValue(ob); 
var propVal = prop.GetValue(ob); 
+0

मुझे नहीं लगता कि यह काम करेगा _as is_। '_datafile' को एक संपत्ति होने की आवश्यकता है। – Otiel

+0

आपको संपत्तियों के साथ एक ही चीज़ करने में सक्षम होना चाहिए। मैंने अपने उदाहरण में एक जोड़ा है। –

+0

हम्म हाँ, यह 'डेटाफाइल 'के साथ काम करेगा, लेकिन' _datafile' के साथ नहीं। आपको 'var f = typ को हटा देना चाहिए।GetField ("_ datafile"); ' – Otiel

संबंधित मुद्दे