我使用了一个流行的在线代码转换器从VB转到C#,C#没有在这个for循环上工作。任何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);
}
答案 0 :(得分:7)
替换
CustomerRoles(x).Name
与
CustomerRoles[x].Name
使用方括号访问数组(或列表)的索引器而不是C#中的paranthesis。
如果它不是一个集合而是一个属性或字段,你只需删除该paranthesis:
CustomerRoles.Name
如果这不起作用(无论出于何种原因),您可以尝试Enumerable.ElementAt
:
CustomerRoles.ElementAt(x).Name
即使它没有实现IEnumerable<T>
(索引器也需要),它适用于任何类型的IList<T>
。
答案 1 :(得分: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);
}
好的,我在VB中尝试CustomerRoles(x)
相当于c#中的CustomerRoles.ElementAtOrDefault(x);
。