将循环从VB转换为C#

本文关键字:转换 VB 循环 | 更新日期: 2023-09-27 18:29:51

我使用了一个流行的在线代码转换器来从VB转换到C#,而C#在循环中不起作用。任何C#专家都能看到这个问题吗?

更具体地说,intellisense告诉我CustomerRoles()不能像方法一样使用。它在VB.中运行良好

VB:

 Dim Roles As New List(Of String)
 For x As Integer = 0 To EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles().Count - 1
     Roles.Add(EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles(x).Name)
     ddlRoles.Items.Add(EngineContext.Current.Resolve(Of IWorkContext)().CurrentCustomer.CustomerRoles(x).Name)
 Next

C#(这不起作用):

List<string> Roles = new List<string>();
for (int x = 0; x <= EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles().Count - 1; x++) {
  Roles.Add(EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles(x).Name);
  ddlRoles.Items.Add(EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles(x).Name);
}

将循环从VB转换为C#

更换

CustomerRoles(x).Name

带有

CustomerRoles[x].Name

您可以用方括号访问数组(或列表)的索引器,而不是用C#中的副题。

如果它不是一个集合,而是一个属性或字段,那么你只需要删除附带条件:

CustomerRoles.Name

如果这不起作用(无论出于何种原因),你可以尝试Enumerable.ElementAt:

CustomerRoles.ElementAt(x).Name

这适用于任何类型的IEnumerable<T>,即使它没有实现IList<T>(索引器所需)。

试试这个:

C#(this is not working)
List<string> Roles = new List<string>();
for (int x = 0; x <= EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles.Count - 1; x++) {
    Roles.Add(EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles[x].Name);
    ddlRoles.Items.Add(EngineContext.Current.Resolve<IWorkContext>().CurrentCustomer.CustomerRoles[x].Name);
}

好的,我在VB中尝试过CustomerRoles(x)相当于c#中的CustomerRoles.ElementAtOrDefault(x);