【问题标题】:Translate from VB to C# for loop从 VB 转换为 C# for 循环
【发布时间】:2013-09-02 15:08:05
【问题描述】:

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

【问题讨论】:

  • 从自定义角色中删除 ()。这是一个属性,然后将 (x) 更改为您正在按索引访问的 [x]。

标签: c#


【解决方案1】:

替换

CustomerRoles(x).Name

CustomerRoles[x].Name

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

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

CustomerRoles.Name

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

CustomerRoles.ElementAt(x).Name

这适用于任何类型的IEnumerable&lt;T&gt;,即使它没有实现IList&lt;T&gt;(索引器需要)。

【讨论】:

  • 它现在说我不能将 [] 索引应用于 system.collections.generic.icollection 类型的表达式
  • 类型为 system.collections.generic.icollection
  • @mlg74:尝试删除括号或使用ElementAt,编辑我的答案。
  • ElementAt 不起作用。我正在尝试通过删除括号来做到这一点,但到目前为止它并不喜欢这样。如果我这样做,我会在“名称”上收到错误
  • 也许我缺少一个程序集或参考...它说
【解决方案2】:

试试这个:

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

【讨论】:

  • 我得到错误无法将 [] 索引应用于 system.collections.generic.icollection 类型的表达式
  • 我认为是IList&lt;T&gt;。在VB中,您可以通过集合中的索引访问元素???你能把它的类型改成 IList ???
  • 如何更改? IList, Roles = newe IList();??
  • 我明白了,但它说我可能缺少汇编或参考
  • Using System.Linq 在使用指令中,这就是你所需要的。
猜你喜欢
  • 2021-10-15
  • 2012-10-13
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多