2009-04-21 19 views
8

मैंने सी # में अनाम प्रकार बनाने के तरीके पर कुछ लेख पढ़े हैं।कुछ उदाहरण क्या हैं अज्ञात प्रकार उपयोगी हैं?

इन चीजों के लिए कुछ उपयोग के मामले क्या हैं? मेरे लिए, ऐसा लगता है कि यह वस्तुओं और उनके सदस्यों को इनलाइन घोषित करने के लिए चीजों को थोड़ा और कठिन बना सकता है।

बेनामी प्रकारों का उपयोग करने के लिए यह कब समझ में आता है?

+0

क्या आप उस लेख का लिंक जोड़ सकते हैं? –

उत्तर

6

मुझे अज्ञात प्रकारों का उपयोग करना पसंद है जब मुझे किसी संग्रह में बाध्य करने की आवश्यकता होती है जो मुझे आवश्यक रूप से फिट नहीं करता है।

var payments = from terms in contract.PaymentSchedule 
        select new 
        { 
         Description = terms.Description, 
         Term = terms.Term, 
         Total = terms.CalculatePaymentAmount(_total), 
         Type=terms.GetType().Name 
        }; 

यहाँ मैं तो payments.ToList को एक datagrid बाँध(): उदाहरण के लिए यहाँ मेरे ऐप से एक नमूना है। यहां बात यह है कि मैं एक इंटरमीडिरी को परिभाषित करने के लिए कई वस्तुओं को एकत्रित कर सकता हूं।

3

मैं जटिल नियंत्रणों - जैसे ग्रिड की तरह डेटाबेसिंग करते समय अक्सर उनका उपयोग करता हूं। यह मुझे उस डेटा को प्रदर्शित करने के लिए नियंत्रण में भेजने के लिए एक आसान तरीका प्रदान करता है जो नियंत्रण के लिए उस डेटा का प्रदर्शन आसान बनाता है।

GridView1.DataSource = myData.Select (x => नया {नाम = x. डिस्क्रिप्शन, दिनांक = x.Date.ToShortDate()});

लेकिन बाद में, कोड स्थिर होने के बाद, मैं अज्ञात वर्गों को नामित कक्षाओं में परिवर्तित कर दूंगा।

मेरे पास मामले भी हैं (रिपोर्टिंग सेवाएं) जहां मुझे गैर-रिलेशनल डेटा का उपयोग करके उन्हें लोड करने की आवश्यकता है, और रिपोर्टिंग सेवाओं को डेटा फ़्लैट होने की आवश्यकता है! मैं आसानी से डेटा को फ़्लैट करने के लिए LINQ/Lambda का उपयोग करता हूं।

0

वे जब LINQ

var query = from c in listOfCustomers 
      select new {FirstName = c.Name,c.City}; 

का उपयोग कर उपयोगी होते हैं इस Introduction to LINQ

0

Here पर एक नज़र बेनामी प्रकार के उपयोग के बारे में चार्ली Calvert द्वारा एक अच्छा ब्लॉग पोस्ट है।

1

मैं उन्हें सरल संरचना/संरचना वस्तुओं के लिए एक बहुत ही उपयोगी प्रतिस्थापन के रूप में ढूंढता हूं, खासकर जब वीबीएनईटी के साथ काम करते हैं क्योंकि यह स्वत: कार्यान्वित गुणों का समर्थन नहीं करता है।

2

LINQ/लैम्ब्डा के

var quantity = ... 
var query = db.Model.Select(m => new 
            { 
            Name = m.Name, 
            Price = m.Price, 
            Cost = M.Price * quantity 
            }); 
foreach (var q in query) 
{ 
    Console.WriteLine(q.Name); 
    Console.WriteLine(q.Price); 
    Console.WriteLine(q.Cost); 
} 

ASP.NET MVC -HtmlHelpers या जब JSON

<%= Html.TextBox("Name", Model.Name, new { @class = "required" }) %> 

public ActionResult SearchModels(var q, int limit) 
{ 
    var query = db.Models.Where(m => m.Name.StartsWith(q)) 
          .Take(limit) 
          .Select(m => new { m.DisplayName, m.Name, m.ID }); 

    return Json(query.ToList()); 
} 

लौटने वास्तव में, काफी कहीं भी तुम सिर्फ एक अल्पकालिक कार्रवाई के लिए एक अस्थायी कंटेनर प्रकार की जरूरत है।

0

व्यक्तिगत रूप से, मुझे अनाम प्रकारों के लिए अधिक उपयोग नहीं मिलता है। वे निश्चित रूप से कम से कम सावधानी बरतने के लिए इस्तेमाल किया जा रहा है। जिस स्थिति में उनका आम तौर पर उपयोग किया जाता है, वे हैं जब LINQ क्वेरीज बनाते हैं जो एकाधिक मानों को दोबारा बदलते हैं, और आपको केवल कार्य की अवधि के लिए पूछे जाने वाले डेटा का उपयोग करने की आवश्यकता होती है। (यदि डेटा को बाहर इस्तेमाल करने की आवश्यकता है, तो अनाम प्रकारों का उपयोग नहीं किया जा सकता है - आपको अपना खुद का घोषित करने की आवश्यकता है, और अच्छे कारण, यानी पठनीयता।) आम तौर पर, सादे लैम्ब्डा अभिव्यक्तियों का उपयोग करते समय वे कभी-कभी उपयोगी हो सकते हैं, हालांकि फिर मैंने खुद को बहुत कम आवश्यकता है। (जब मैं जरूरी कहता हूं, संदर्भ के आधार पर लगभग विकल्प हैं, लेकिन कभी-कभी अनाम प्रकार वास्तव में सबसे सुरुचिपूर्ण विकल्प हैं।) यदि आप एक कोड उदाहरण चाहते हैं, तो बस मुझे बताएं और मैं कुछ उचित तरीके से सभ्य एप्लिकेशन के साथ आने की कोशिश करूंगा।

2
से

घोड़े की (माइक्रोसॉफ्ट के) mouth:

बेनामी प्रकार एक सुविधाजनक तरह से पहले स्पष्ट रूप से एक प्रकार को परिभाषित करने के बिना एक वस्तु में केवल पढ़ने के लिए सम्पत्तियों का एक समूह को संपुटित उपलब्ध हैं।

बेनामी प्रकार उन क्षेत्रों में उपयोगी हैं जिन पर आप आमतौर पर परिभाषित संरचना का उपयोग करेंगे, लेकिन ऐसा नहीं करना चाहते क्योंकि यह केवल सीमित दायरे में ही उपयोग किया जाएगा। मैं डेटा स्रोत के रूप में या समेकित (योग, गिनती, आदि) मानों के लिए कंटेनरों के रूप में उनका उपयोग करता हूं।

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