将List <string>转换为标记化字符串</string>

时间:2015-02-02 11:42:16

标签: c# linq

我在List容器类中有一个字符串列表,如下所示:

MainMenuItem|MenuItem|subItemX
..
..
..
..
MainMenuItem|MenuItem|subItem99

我要做的是使用LINQ转换字符串,以便删除每个标记化字符串的第一项。

这是我已有的代码:

protected static List<string> _menuItems = GetMenuItemsFromXMLFile();
_menuItems.Where(x => x.Contains(menuItemToSearch)).ToList();

第一行代码返回一个完整的XML文件,其中包含以令牌形式存在于应用程序中的所有菜单项;

第二行是说'让我得到属于menuItemToSearch的所有菜单项'。 menuItemToSearch包含在返回的分隔字符串中。如何使用linq删除它?

示例

转换前:MainMenuItem | MenuItem | subItem99

转换后:MenuItem | subItem99

希望这个例子能说明我的意图 感谢

2 个答案:

答案 0 :(得分:4)

您可以从管道符号'|'的第一个位置获取子字符串,以从字符串中删除第一个项目,如下所示:

var str = "MainMenuItem|MenuItem|subItemX";
var dropFirst = str.Substring(str.IndexOf('|')+1);

Demo.

将此应用于LINQ Select列表中的所有字符串,以产生所需的结果:

var res = _menuItems
    .Where(x => x.Contains(menuItemToSearch))
    .Select(str => str.Substring(str.IndexOf('|')+1))
    .ToList();

答案 1 :(得分:0)

也许这样可以帮助你。

var regex = new Regex("[^\\|]+\\|(.+)");
var list = new List<string>(new string[] { "MainMenuItem|MenuItem|subItem99", "MainMenuItem|MenuItem|subItem99" });
var result = list.Where(p => regex.IsMatch(p)).Select(p => regex.Match(p).Groups[1]).ToList();

这应该可以正常工作。