类型和标识符在使用对象的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(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
。大多数情况下,两者都足够了。