将代码片段从VB.NET转换为C#

时间:2012-02-24 10:45:29

标签: c# .net vb.net linq code-conversion

我尝试了许多免费的代码转换器来转换以下内容,但没有成功。

 Dim resultList = ((From e In p_Xml.Elements()
                       Where UCase(e.Name.LocalName) = searchName).Union(
                         From a In p_Xml.Attributes()
                         Where UCase(a.Name.LocalName) = searchName
                         Select <<%= propertyName %>><%= a.Value %></>)).ToList()

我想我明白了吗

var resultList = (from e in p_xml.Elements()
                where e.Name.LocalName == searchName
                select propertyName).
Union(from a in p_xml.Attributes()
      where a.Name.LocalName == searchName
      select a.Value).ToList();

3 个答案:

答案 0 :(得分:1)

您的转换遗漏了UCase,其在C#中的等效内容为ToUpperCase

但这不是执行不区分大小写的字符串比较的推荐方法。

e.Name.LocalName == searchName

应该替换为:

String.Compare(e.Name.LocalName, searchNamename, StringComparison.InvariantCultureIgnoreCase) == 0

另外,propertyName是什么?无论它是什么,它的价值显然不依赖于e。您在第一个查询中为每个e选择了一个相同的内容,这没有任何意义。我想你的意思是select e

你可能想要的是:

var resultList = (from e in p_xml.Elements()
                where String.Compare(e.Name.LocalName, searchName, StringComparison.InvariantCultureIgnoreCase) == 0
                select e).
Union(from a in p_xml.Attributes()
      where String.Compare(a.Name.LocalName, searchName, StringComparison.InvariantCultureIgnoreCase) == 0
      select a.Value).ToList();

我只是不确定如何在C#中表示Select <<%= propertyName %>><%= a.Value %></>,因为我不懂VB。

答案 1 :(得分:0)

我一直使用的良好在线代码转换器是http://www.developerfusion.com/tools/convert/vb-to-csharp/

答案 2 :(得分:0)

我在演示文稿中听到了Microsoft的Roslyn项目。也许这可以帮到你。

Microsoft希望在将来的Visual Studio版本中集成 Roslyn 。然后就可以将代码从VB复制到剪贴板并将其粘贴为C#代码。去年也有一个关于这个的介绍,也许是同一个。