【问题标题】:Can't convert VB.NET to C#无法将 VB.NET 转换为 C#
【发布时间】:2017-11-11 19:16:54
【问题描述】:

我需要将VB.NET 应用程序转换为C#。项目有以下几行:

inTrip.Stops.AddRange(trip.Stops)
inTrip.Stops.ForEach(Sub(s) s.Trip = inTrip)

但我不清楚它的作用,所以我无法转换它。这些行的C# 的正确代码是什么?

编辑

据我了解,应该是这样的:

foreach (var item in trip.Stops)
{
    var item_db = mapper.Map<TripStop>(item);
    inTrip.TripStops.Add(item_db);
}

foreach (var item in inTrip.TripStops)
{
    item.Trip = inTrip;
}

但是这些循环引用(inTrip 有 TripStops 的集合,并且对于集合的每个元素又设置了 Trip 元素)让我感到困惑

【问题讨论】:

  • 我不是 VB.NET 程序员。然而我可以很容易地阅读。第一行将一个集合添加到另一个集合。第二行使用 lambda 表达式循环遍历集合,并将值分配给集合中项的属性。 C# 几乎完全相同。我想你可以解决这个问题。
  • 很简单。只需在两行末尾添加分号,然后将Sub(s) 更改为s =&gt;
  • 它看到它非常简单。但是我收到一个错误:“ICollection”不包含“AddRange”的定义,并且没有扩展方法“AddRange”接受“ICollection”和“ICollection”类型的第一个参数不包含“ForEach”的定义,并且找不到接受“ICollection”类型的第一个参数的扩展方法“ForEach”(您是否缺少 using 指令或程序集引用?)
  • 你真的自己尝试过something吗?
  • @AlexB.,我把整个项目从 VB.NET 移到了 C#,但是这些字符串让我很困惑......

标签: c# vb.net


【解决方案1】:

代码:

  1. trip.Stops 集合附加到inTrip.Stops
  2. 使用 lambda 表达式在 inTrip.Stops 上运行 foreach 循环,将“父”属性设置为 inTrip

C# 代码非常相似;只是 lambda 表达式的语法不同:

inTrip.Stops.AddRange(trip.Stops);
inTrip.Stops.ForEach((s) => s.Trip = inTrip);

【讨论】:

  • 我收到一个错误:“ICollection”不包含“AddRange”的定义,并且没有扩展方法“AddRange”接受“ICollection”类型的第一个参数并且“ICollection”不包含“ForEach”的定义,并且找不到接受“ICollection”类型的第一个参数的扩展方法“ForEach”(您是否缺少 using 指令或程序集引用? )
  • @maccettura,是的
  • @OlegSh 这些方法通常用于List 而不是ICollection。可以把属性类型改成List吗?
  • @maccettura,也添加了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多