类型和标识符在使用对象的foreach语句中都是必需的

本文关键字:语句 foreach 类型 标识符 对象 | 更新日期: 2023-09-27 18:17:03

我有下面的代码从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 in object) ....

我尝试了这个语法,它抛出了这个错误

一个名为'objVendor'的局部变量不能在这个作用域中声明,因为它会给'objVendor'一个不同的含义,它已经在父作用域或当前作用域中用来表示其他东西

所以我很好奇如何修复这个特定的错误。我在这里的任何主题中都找不到所以我想我应该问一下

类型和标识符在使用对象的foreach语句中都是必需的

对于foreach,您需要设置参数的类型,如下所示。

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

您已经在这里声明了一个名为objVendor的东西:

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

您需要在循环中选择一个唯一的名称。

编译器错误非常简单。您已经声明了一个名为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。大多数情况下,两者都足够了。