2010-10-12 18 views
6
public ActionResult Create(FormCollection collection, FormCollection formValue) 
{ 
    try 
    { 
     Project project = new Project(); 

     TryUpdateModel(project, _updateableFields); 

     var devices = collection["devices"]; 
     string[] arr1 = ((string)devices).Split(','); 
     int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s)); 

     project.User = SessionVariables.AuthenticatedUser; 
     var time = formValue["Date"]; 
     project.Date = time; 
     project.SaveAndFlush(); 

     foreach (int i in arr2) 
     { 
      Device d = Device.Find(i); 
      d.Projects.Add(project); 
      d.SaveAndFlush(); 
     } 

     return RedirectToAction("Index"); 
    } 
    catch (Exception e) 
    { 
     return View(e); 
    } 
} 

मैं एक अगर बयान जो की जाँच करता है, तोजांच करें कि संग्रह खाली है या नहीं

var devices = collection["devices"]; 

खाली है या नहीं में foreach रैप करने के लिए चाहते हैं। यदि यह खाली है तो प्रत्येक के लिए निष्पादित नहीं किया जाना चाहिए। रिकॉर्ड के लिए, संग्रह ["डिवाइस"] एक फॉर्म से चेकबॉक्स मानों का संग्रह है।

उत्तर

6

आपको यह जांचने की आवश्यकता नहीं है कि संग्रह खाली है या नहीं, अगर यह खाली है तो फोरेएच के अंदर कोड निष्पादित नहीं किया जाएगा, नीचे मेरा उदाहरण देखें।

using System; 
using System.Collections.Generic; 

namespace Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<string> emptyList = new List<string>(); 

      foreach (string item in emptyList) 
      { 
       Console.WriteLine("This will not be printed"); 
      } 

      List<string> list = new List<string>(); 

      list.Add("item 1"); 
      list.Add("item 2"); 

      foreach (string item in list) 
      { 
       Console.WriteLine(item); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 
+0

हाँ मुझे खेद है कि मैं मूर्ख हूं। अगर कथन का प्रयास करते समय मुझे मिली त्रुटि को गलत समझें। यह एक खाली संग्रह के माध्यम से लूप करने की कोशिश कर रहे अग्रदूत द्वारा नहीं किया जा रहा था। यदि कथन में हल होता है तो int सरणी में रूपांतरण डालना। – Prd

13

यदि संग्रह खाली है या नहीं

ताकि आप कुछ इस तरह से खत्म हो जाएगा की जाँच करने के Count फ़ील्ड का उपयोग कर सकते हैं:

if(devices.Count > 0) 
{ 
    //foreach loop 
} 
+0

हाँ मैं वास्तव में है कि कोशिश की है, लेकिन यह मुझे एक त्रुटि देता है: त्रुटि 1 'स्ट्रिंग' 'गणना' और कोई विस्तार विधि 'गणना' प्रकार 'स्ट्रिंग' के पहले तर्क को स्वीकार करने के लिए एक परिभाषा शामिल नहीं है पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?) – Prd

+0

गणना करें() https://msdn.microsoft.com/en-us/library/vstudio/bb338038%28v=vs.100%29.aspx जैसा कि मुझे लगता है कि फॉर्मकॉलेक्शन INumerable – danio

0

कैसे सरणी लंबाई

if (arr2.length > 0) 
{ 
    foreach (int i in arr2) 
    { 
     Device d = Device.Find(i); 
     d.Projects.Add(project); 
     d.SaveAndFlush(); 
    } 
} 
जाँच के बारे में
+0

मुझे एक ही त्रुटि देता है:/ – Prd

+0

तो विभिन्न डिवाइस आपके द्वारा अपेक्षित प्रकार को वापस नहीं कर रहे हैं। – Roadie57

+0

अगर लोग 'var' का उपयोग नहीं कर रहे थे तो उनमें से अधिकतर बहुत खुश होंगे ... –

1

आपका कोड, जैसा कि यह खड़ा है, काम नहीं करेगा, जैसा कि आप कहते हैं कि collection["devices"] चेकबॉक्स मानों का संग्रह है, और फिर भी आप इसेपर कास्टिंग कर रहे हैं। क्या आपका मतलब है collection चेकबॉक्स मान है? collection का सटीक प्रकार क्या है?

ICollection या ICollection<T> लागू करने वाली कोई भी वस्तु जांच की जा सकती है कि यह खाली है या नहीं, यह जांचकर कि Count संपत्ति शून्य से अधिक है या नहीं।

+0

इसका एक फॉर्मकोलेक्शन है। मैं इसे एक int सरणी में परिवर्तित कर रहा हूं ताकि मूल्यों को संसाधित किया जा सके। मैंने पूरी कार्रवाई को दिखाने के लिए कोड को अपडेट किया है जैसा कि अब है। यह कोड तब तक काम करता है जब तक आप कम से कम 1 चेकबॉक्स चुनते हैं जो समस्या है। – Prd

+0

फॉर्मकोलेक्शन केवल उन नियंत्रणों को लौटाता है जिनमें डेटा होता है। यह सामान्य व्यवहार है – Roadie57

5

आप विधि Any उपयोग कर सकते हैं जानना चाहते हैं कि किसी भी तत्व के रूप में एक संग्रह।

if (devices.Any()) 
{ 
    //devices is not empty 
} 
+0

कोई भी() एक LINQ विधि है और आपको इतनी सरल जांच के लिए बहुत अधिक ओवरहेड देता है। यदि आपका संग्रह IENumerable नहीं है तो गणना या लंबाई को प्राथमिकता दें –

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