繁体   English   中英

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

[英]Tried to convert VB code to C# but error occurred

我确实将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  
//=======================================================  

请帮我...

您使用过的C#等效方法:

Strings.InStr具有String.IndexOf的等效项

Strings.Mid具有String.Substring的等效

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

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

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

您需要使用C#等效功能,如下所示:

nPos = sHeadingNm.IndexOf('1');

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM