एक लंबोदर अभिव्यक्ति का उपयोग करें
MyClass result = list.Find(x => x.GetId() == "xy");
नोट: C # में गुणों के लिए एक अंतर्निहित सिंटैक्स है। लिखने वाले और सेटर के तरीकों को लिखने के बजाय (जैसा कि आप जावा से उपयोग किया जा सकता है), लिखें
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
एक प्रासंगिक कीवर्ड है जिसे केवल सेट एक्सेसर में जाना जाता है। यह संपत्ति को सौंपे गए मूल्य का प्रतिनिधित्व करता है।
चूंकि यह पैटर्न अक्सर उपयोग किया जाता है, इसलिए C # ऑटो-कार्यान्वित गुण प्रदान करता है । वे ऊपर दिए गए कोड का एक छोटा संस्करण हैं; हालाँकि, बैकिंग वैरिएबल छिपा हुआ है और पहुँच योग्य नहीं है (यह VB में कक्षा के भीतर से पहुँच योग्य है, हालाँकि)।
public string Id { get; set; }
आप बस गुणों का उपयोग कर सकते हैं जैसे कि आप किसी क्षेत्र में पहुँच रहे थे:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
गुणों का उपयोग करते हुए, आप इस तरह सूची में मौजूद वस्तुओं की खोज करेंगे
MyClass result = list.Find(x => x.Id == "xy");
यदि आपको केवल-पढ़ने के लिए संपत्ति चाहिए, तो आप ऑटो-कार्यान्वित गुणों का भी उपयोग कर सकते हैं:
public string Id { get; private set; }
यह आपको Id
कक्षा के भीतर सेट करने में सक्षम बनाता है लेकिन बाहर से नहीं। यदि आपको इसे व्युत्पन्न वर्गों में सेट करने की आवश्यकता है और साथ ही आप सेटर की सुरक्षा भी कर सकते हैं
public string Id { get; protected set; }
और अंत में, आप गुणों को घोषित कर सकते हैं virtual
और उन्हें व्युत्पन्न वर्गों में ओवरराइड कर सकते हैं, जिससे आप गेटर्स और सेटर के लिए अलग-अलग कार्यान्वयन प्रदान कर सकते हैं; बस के रूप में साधारण आभासी तरीकों के लिए।
C # 6.0 (Visual Studio 2015, Roslyn) के बाद से आप इनलाइन इनिशलाइज़र के साथ गेटटर-ओनली ऑटो-प्रॉपर्टीज़ लिख सकते हैं
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
आप इसके बजाय कंस्ट्रक्टर के भीतर गेटटर-केवल गुणों को इनिशियलाइज़ कर सकते हैं। गेटर-केवल ऑटो-गुण हैं सच केवल पढ़ने के लिए गुण, एक निजी सेटर के साथ स्वत: लागू किया गुण के विपरीत है।
यह ऑटो-गुण पढ़ने-लिखने के साथ भी काम करता है:
public string Id { get; set; } = "A07";
C # 6.0 के साथ शुरुआत करके आप अभिव्यक्ति-शारीरिक सदस्यों के रूप में भी गुण लिख सकते हैं
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
देखें: .NET कंपाइलर प्लेटफ़ॉर्म ("रोज़लिन")
C # 6 में नई भाषा सुविधाएँ
C # 7.0 के साथ शुरू , दोनों, गेटटर और सेटर, अभिव्यक्ति निकायों के साथ लिखा जा सकता है:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
ध्यान दें कि इस मामले में सेटर एक अभिव्यक्ति होना चाहिए। यह एक बयान नहीं हो सकता। उपरोक्त उदाहरण काम करता है, क्योंकि C # में असाइनमेंट का उपयोग एक्सप्रेशन के रूप में या स्टेटमेंट के रूप में किया जा सकता है। असाइनमेंट एक्सप्रेशन का मान असाइन किया गया मान है, जहाँ असाइनमेंट स्वयं एक साइड इफेक्ट है। यह आपको एक बार में एक से अधिक वेरिएबल के लिए मान निर्दिष्ट करने की अनुमति देता है: बयानों के x = y = z = 0
समान है x = (y = (z = 0))
और इसका प्रभाव भी है x = 0; y = 0; z = 0;
।
भाषा का अगला संस्करण, C # 9.0, शायद नवंबर 2020 में उपलब्ध है, केवल पढ़ने के लिए (या बेहतर इनिशियलाइज़-एक बार) गुण है कि आप एक वस्तु इनिशलाइज़र में इनिशियलाइज़ कर सकते हैं। गटर-केवल गुणों के साथ वर्तमान में यह संभव नहीं है।
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
यह पहले से ही पता होगा कि आप प्राथमिक कुंजी की तलाश कर रहे हैं। सिर्फ जानकारी के लिए।