C# 从VB.net到C

C# 从VB.net到C,c#,asp.net,treeview,C#,Asp.net,Treeview,我正在从VB向C语言迈出一大步。事情并没有变得太糟。但我卡在了我的treeview数据绑定潜水艇上。有一部分我无法工作。我正在使用自定义安全性来控制对应用程序的访问。它有一个绑定到站点地图的树状视图。我在站点地图中添加了一个名为securitylevel的自定义属性。一个人可以有多个安全级别,所以我用他们的安全级别构建了一个字符串。然后我删除他们无权访问的节点。我无法使用.net角色,因为我必须使用现有数据库。我不知道如何删除父节点和子节点。下面是VB代码 strNodesToHide

我正在从VB向C语言迈出一大步。事情并没有变得太糟。但我卡在了我的treeview数据绑定潜水艇上。有一部分我无法工作。我正在使用自定义安全性来控制对应用程序的访问。它有一个绑定到站点地图的树状视图。我在站点地图中添加了一个名为securitylevel的自定义属性。一个人可以有多个安全级别,所以我用他们的安全级别构建了一个字符串。然后我删除他们无权访问的节点。我无法使用.net角色,因为我必须使用现有数据库。我不知道如何删除父节点和子节点。下面是VB代码

    strNodesToHide As String = "100, 500, 900"

    Dim node As SiteMapNode = TryCast(e.Node.DataItem, SiteMapNode)

    If Len(node("SecurityLevel")) <> "0" Then
        If InStr(strNodesToHide, node("securityLevel")) Then
            e.Node.Parent.ChildNodes.Remove(e.Node)
        End If
    End If

我认为这应该是一个非常直接的转换:

string strNodesToHide = "100, 500, 900";

SiteMapNode node = e.Node.DataItem as SiteMapNode;

if (node["securityLevel"].length != 0) {
  if (strNodesToHide.indexOf(node["securityLevel"]) > -1) {
    e.Node.Parent.ChildNodes.Remove(e.Node);
  }
}
诸如此类:


我还没有测试过这个。希望它能起作用。

那么,您无法将代码的哪些方面翻译为C?即使VB.NET代码已经很难看,Len也会返回一个整数,您可以将其与1进行比较。相反,使用If nodeSecurityLevel.Length 0或If Not String.IsNullOrEmptynodeSecurityLevelGuesswork,但如果要隐藏的节点实际上是100、500和900,则使用静态只读HashSet strNodesToHide=new HashSetnew[]{100、500、900}可能会更快;然后检查strNodesToHide.Containsnode[securityLevel]——如果这些值始终是数值,则应使用实际类型,即int。Typo,您可能指的是strNodesToHide.indexOfnode[securityLevel]。@Corak确实如此。换了。