从VB转换为C#for循环

mlg*_*g74 1 c#

我使用了一个流行的在线代码转换器从VB转到C#,C#没有在这个for循环上工作.任何C#专家都能看到问题吗?

更具体地说,智能感知告诉我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
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 7

更换

CustomerRoles(x).Name
Run Code Online (Sandbox Code Playgroud)

CustomerRoles[x].Name
Run Code Online (Sandbox Code Playgroud)

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

如果它不是集合而是属性或字段,则只需删除paranthesis:

CustomerRoles.Name
Run Code Online (Sandbox Code Playgroud)

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

CustomerRoles.ElementAt(x).Name
Run Code Online (Sandbox Code Playgroud)

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