试图将VB代码转换为C#但发生错误

时间:2017-06-23 12:06:07

标签: c#

我确实将VB代码转换为C#代码,但发生了错误。我在Strings.InStrStrings.Mid中收到错误。

    sHeadingNm = ActiveDocument.Styles(wdStyleHeading1).NameLocal;  
if (!string.IsNullOrEmpty(sHeadingNm)) {  
    nPos = Strings.InStr(1, sHeadingNm, "1");  
    if (nPos > 0)  
        sHeadingNm = Strings.Mid(sHeadingNm, 1, nPos - 1);  
}  

//=======================================================  
//Service provided by Telerik (www.telerik.com)  
//Conversion powered by NRefactory.  
//Twitter: @telerik  
//Facebook: facebook.com/telerik  
//=======================================================  

请帮帮我......

4 个答案:

答案 0 :(得分:5)

您使用的方法的C#等价物:

Strings.InStr相当于String.IndexOf

Strings.Mid相当于String.Substring

答案 1 :(得分:1)

您的问题必须是Strings.InStrStrings.Mid不是C#中的标准方法,而是在VB.net中。您应该添加using Microsoft.VisualBasic以便使用它们,尽管我建议使用C#等效方法。

答案 2 :(得分:1)

更好地说,您让Telerik转换器转换代码。代码转换器不能安全地假设一种语言中存在的库和函数调用在另一种语言中不存在;他们知道,你的目标代码有一个自定义库,模仿源语言中仅存在的函数的行为。此外,VB中仅VB的大多数功能都是基于1的,而不是基于0的.Net的其余部分。

因此,您无法自动将Strings.InStr转换为String.IndexOf。你也不会看到Strings.Mid到String.Substring。寻找“0”从Strings.InstrStrings.Mid返回的代码因为没有找到任何内容会中断,因为“0”现在是成功搜索中的第一个索引。您实际上需要随后出现的错误,以确定您需要调整代码的位置以查找正确的响应(即,在没有结果的搜索中为-1)。

答案 3 :(得分:1)

您需要使用类似这样的C#等效函数:

nPos = sHeadingNm.IndexOf('1');

sHeadingNm = sHeadingNm.Substring(1,nPos - 1);