1

我使用流行的在线代码转换器从 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

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);
}
4

2 回答 2

7

代替

CustomerRoles(x).Name

CustomerRoles[x].Name

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

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

CustomerRoles.Name

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

CustomerRoles.ElementAt(x).Name

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

于 2013-09-02T15:09:52.287 回答
3

尝试这个:

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);
}

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

于 2013-09-02T15:10:26.390 回答