2012-08-05 13 views
5

मूल रूप से मैं LINQ के लिए इस कोड को अनुकूल करने के लिए करना चाहते हैं:LINQ में केवल पहली वस्तु का चयन करें?

private Tile CheckCollision(Tile[] tiles) 
{ 
    foreach (var tile in tiles) 
    { 
     if (tile.Rectangle.IntersectsWith(Rectangle)) 
     { 
      return tile; 
     } 
    } 

    return null; 
} 

कोड प्रत्येक टाइल जाँच करता है और पहले टाइल उस वस्तु से टकरा देता है।

private Tile CheckCollision(Tile[] tiles) 
{ 
    var rtn = 
     from tile in tiles 
     where tile.Rectangle.IntersectsWith(Rectangle) 
     select tile; 

} 

मुझे क्या करना चाहिए: मैं केवल पहले टाइल, नहीं टाइल्स की एक सरणी है कि मैं अगर मैं इस का उपयोग मिलेगा चाहते हैं?

उत्तर

16

आप .First() या .FirstOrDefault() विस्तार विधि आप एक निश्चित शर्त मिलान पहला तत्व को पुनः प्राप्त करने की अनुमति देता है कि इस्तेमाल कर सकते हैं: यदि कोई तत्व सरणी में पाया जाता है

private Tile CheckCollision(Tile[] tiles) 
{ 
    return tiles.FirstOrDefault(t => t.Rectangle.IntersectsWith(Rectangle)); 
} 

.First() विस्तार विधि एक अपवाद फेंक देते हैं कि आवश्यक स्थिति से मेल खाता है। दूसरी तरफ .FirstOrDefault() चुपचाप शून्य वापस आ जाएगा। तो उस व्यक्ति का उपयोग करें जो आपकी आवश्यकताओं के अनुरूप है।

सूचना वहाँ भी है कि आप इस्तेमाल कर सकते हैं .Single() विस्तार विधि है कि। .First() के साथ अंतर यह है कि .Single() एक अपवाद फेंक देगा यदि एक से अधिक तत्व स्थिति से मेल खाते हैं जबकि .First() पहले व्यक्ति को वापस कर देगा।

+0

+1, जैसे ही एसओ मुझे देता है इसे स्वीकार करेगा। :) – ApprenticeHacker

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