2015-10-09 49 views
0

都需要在foreach語句中我有以下代碼從VB到C#類型和標識符使用對象

private void LoadDropDownList() 
{ 
    DropDownList location = (DropDownList) Form.FindControl("ddlLocation_ID"); 
    DropDownList vendorID = (DropDownList) Form.FindControl("ddlVendor_ID"); 

    //-- Load the Sales Locations 
    dtDataList_v10_r1.List objList = new dtDataList_v10_r1.List(); 
    DataSet ds = default(DataSet); 
    DataView dvActiveLocations = null; 

    ds = objList.GetSalesLocationDataset(mobjSecurity.SQLDatabase, mobjSecurity.Inst_ID); 
    if ((ds != null)) { 
     if (ds.Tables.Count > 0) { 
      dvActiveLocations = new DataView(ds.Tables[0]); //changed to square brackets per c# syntax 10/9/15 Max // 
      dvActiveLocations.RowFilter = "status='A'"; 
     } 
    } 

    //ddlLocation_ID.DataSource = dvActiveLocations; 
    //ddlLocation_ID.DataTextField = "ChannelName"; 
    //ddlLocation_ID.DataValueField = "Channel_ID"; 
    //ddlLocation_ID.DataBind(); 
    location.DataSource = dvActiveLocations; // changed to reference control and c# syntax 10/9/15 Max // 
    location.DataTextField = "ChannelName"; // changed to reference control and c# syntax 10/9/15 Max // 
    location.DataValueField = "Channel_ID"; // changed to reference control and c# syntax 10/9/15 Max // 
    location.DataBind(); // changed to reference control and c# syntax 10/9/15 Max // 



    //-- Load the Available Auction downloads 
    dtIntegration_v10_r1.Vendor objVendor = default(dtIntegration_v10_r1.Vendor); 
    dtIntegration_v10_r1.Vendor[] objVendors = null; 
    dtIntegration_v10_r1.Auctions objAuctions = new dtIntegration_v10_r1.Auctions(ref mobjSecurity); //added ref key word 10/9/15 Max // 
    objVendors = objAuctions.Vendors; 



    foreach (objVendor in objVendors) 
     if (objVendor.HasVendorRelationship == true) 
     { 
      //ddlVendor_ID.Items.Insert(0, objVendor.Name); 
      //ddlVendor_ID.Items(0).Value = objVendor.Vendor_ID; 
      vendorID.Items.Insert(0, objVendor.Name); 
      vendorID.Items[0].Value = Convert.ToString(objVendor.Vendor_ID); //changed to reference control and facilitate conversion to string 10/9/15 Max // 
     } 
} 

轉換我得到以下錯誤,當我執行它

類型和標識符在foreach語句中都是必需的

現在我認識到一個正確的聲明應該看起來像這樣

的foreach(在對象的類型var somevar)....

我想這句法和它拋出這個錯誤

名爲 'objVendor' 的局部變量不能在此範圍內聲明因爲它會賦予'objVendor'不同的含義,'objVendor'已經在父級或當前範圍內用於表示其他內容

所以我很好奇如何解決這個問題特別的錯誤。在任何的主題我無法在這裏找到它,所以我想我會問

+3

爲什麼不給它一個不同的名字? –

+0

@MaorVeitsman @MaorVeitsman我試過了,它似乎給出了同樣的錯誤,即使當我在foreach語句中更改引用名稱和變量時 – MaximusPrime

+0

感謝downvote,儘管我不知道爲什麼 – MaximusPrime

回答

1

在foreach中,您需要設置參數的類型,如此。

foreach(dtIntegration_v10_r1.Vendor objvendor in objVendors) 
{ 
    //your code. 
} 
+0

這樣做的技巧謝謝 – MaximusPrime

+0

您歡迎:* – Rariolu

+0

我懷疑這是正確的答案。你仍然有兩個同名的變量。 – Kapol

0

您已經delcared這裏命名objVendor東西:

dtIntegration_v10_r1.Vendor objVendor = default(dtIntegration_v10_r1.Vendor); 

您需要在環路挑一個唯一的名稱。

1

編譯器錯誤非常簡單。你已經宣佈了一個名爲objVendor變量,它是可見裏面的for循環:

dtIntegration_v10_r1.Vendor objVendor = default(dtIntegration_v10_r1.Vendor); 

現在的位置:

foreach (var objVendor in objVendors) 
    if (objVendor.HasVendorRelationship == true) 

objVendor應在第二行中引用?在循環聲明或第二個聲明中聲明的那個?編譯器無法正確猜測,因此您的代碼不正確。通過給循環變量一個不同的名字來修復它。

foreach (var xyz in objVendors) 

現在我認識到一個正確的說法應該是這樣的

foreach (var somevar in object) .... 

不一定。您可以插入實際類型名稱而不是var。大多數時候都可以。