प्रतिबिंब के साथ ऐसा करना संभव नहीं है, क्योंकि चर के बाद एक बार आईएल में संकलित नहीं किया जाएगा। हालांकि, अगर आप अभिव्यक्ति के पेड़ का उपयोग करें और एक बंद करने के लिए चर को बढ़ावा देने के कर सकते हैं:
static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
आप इस प्रकार इस विधि का उपयोग कर सकते हैं:
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(() => someVar));
}
ध्यान दें कि यह बहुत धीमी है, तो उसका उपयोग नहीं करते अपने आवेदन के महत्वपूर्ण महत्वपूर्ण प्रदर्शन में। हर बार जब यह कोड चलता है, तो कई ऑब्जेक्ट बनाए जाते हैं (जो जीसी दबाव का कारण बनता है) और कवर के तहत कई गैर-इनलाइन योग्य तरीकों को बुलाया जाता है और कुछ भारी प्रतिबिंब का उपयोग किया जाता है।
अधिक संपूर्ण उदाहरण के लिए, here देखें।
अद्यतन
के साथ सी # 6.0, nameof
कीवर्ड भाषा है, जो हमें करने की अनुमति देता में जोड़ा जाता है निम्नलिखित:
static void Main()
{
var someVar = 3;
Console.Write(nameof(someVar));
}
यह स्पष्ट रूप से और अधिक सुविधाजनक है और एक ही लागत है लगातार स्ट्रिंग अक्षर के रूप में स्ट्रिंग को परिभाषित किया है।
@helen मेरा प्रश्न बहुत आसान है, क्योंकि एक प्रश्न के बिखरने के विरोध में वह अभी भी अलग है। –
इसके पीछे तर्क क्या हो सकता है? – Dested