【问题标题】:VB.NET to C# conversionVB.NET 到 C# 的转换
【发布时间】:2012-11-05 17:56:11
【问题描述】:

我正在尝试将一段代码转换为 C#,但我无法理解它:

For iItem = LBound(arrItems) To UBound(arrItems)
    If InStr(arrItems(iItem), strFieldName & "=") = 1 Then
        strFindField = Mid(arrItems(iItem), Len(strFieldName) + 2)
        Exit For
    End If
Next

if 声明是怎么回事?

【问题讨论】:

  • 你试过什么?您当前对解决方案的尝试是否有任何错误?你用过在线转换器吗?您是否熟悉 C# 或 VB?
  • 至于为什么你被否决,我认为这是因为你没有表现出自己解决问题的尝试,你也没有为问题本身付出努力。它只不过是一个带有“为我做”的代码块。懒惰经常会遭到反对。
  • 我也不感谢你甚至没有说出循环应该做什么。
  • @YYY 是什么让你认为他投了反对票?我投了反对票,因为它有几个缺陷。
  • @Servy 声誉的变化愚弄了我,并且缺少评论似乎是一致的。当然,您的评论刚刚出现,所以现在我知道出了什么问题,我实际上可以解决问题。

标签: c# .net vb.net converter


【解决方案1】:

该工具似乎无法生成非常惯用的 C#,因此我将手动为您翻译以提供对比。

foreach (var item in arrItems)
{
   if(item.IndexOf(strFieldName + "=") == 0)
   {
      strFindField = item.Substring(strFieldName.Length + 2);
      break;
   }
}

这应该模仿您在此处所做的事情,但很难说出您的循环的意图是什么。另外,请注意.Substring 将在您输入超出其范围的数字时抛出异常,而Mid 将只返回一个空字符串。但是,由于尚不清楚如何使用此循环的返回,因此很难说处理这种语义变化的最合适的选项是什么。

【讨论】:

  • 你不能从 foreach 中解脱出来吗?
  • 哦,是的,我认为它是另一个无法退出的 ForEach 版本。
  • if(item.IndexOf(strFieldName + "=") == 1) 应该是 if(item.IndexOf(strFieldName + "=") == 0)。 VB 是 1 索引,C# 是 0 索引。您还需要对子字符串进行一些边界检查,以确保字符串足够长以模仿Mid,如果索引超出字符串末尾,它将返回一个空字符串,而不是抛出一个例外。
  • VB 是 1-indexed,VB.Net 是 0-indexed
  • @Servy 很好地抓住了字符串寻址的变化;我很久没有在 vb.net 工作了,所以我忘记了。就Mid 而言,我将添加一条关于处理差异的注释,但我不确定如何处理,因为问题没有建立上下文。可能是空字符串稍后在循环中用作控件,或者可能是逻辑错误。
【解决方案2】:
for (iItem = Information.LBound(arrItems); iItem <= Information.UBound(arrItems); iItem++) {
    if (Strings.InStr(arrItems(iItem), strFieldName + "=") == 1) {
        strFindField = Strings.Mid(arrItems(iItem), Strings.Len(strFieldName) + 2);
        break; // TODO: might not be correct. Was : Exit For
    }
}

http://www.developerfusion.com/tools/convert/vb-to-csharp/

【讨论】:

  • 在 c# 中也是中间和 instr 一个函数
  • 我得到“当前不存在名称'字符串'”即使已使用 Microsoft.VisualBasic 添加;
  • 错误 1 ​​找不到类型或命名空间名称“字符串”(您是否缺少 using 指令或程序集引用?)
  • MidLenInStr 在 C# 中不存在,至少通过该语法不存在。您可以使用Length 作为字符串实例的属性来获取它的长度,IndexOf 作为实例方法而不是InStr,并且Mid 根本没有直接端口。它或多或少是SubString,但对越界索引的支持不同,我认为参数配置略有不同(同时也是实例方法,而不是静态方法)。
  • Strings 是一个独特的 Visual Basic 东西,除非你想导入一堆与 Visual Basic 相关的程序集,否则你将不得不使用更惯用的 C#。例如,对于InStr,您将看到String.IndexOf
猜你喜欢
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多