我在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
希望这个例子能说明我的意图 感谢
答案 0 :(得分:4)
您可以从管道符号'|'
的第一个位置获取子字符串,以从字符串中删除第一个项目,如下所示:
var str = "MainMenuItem|MenuItem|subItemX";
var dropFirst = str.Substring(str.IndexOf('|')+1);
将此应用于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();
这应该可以正常工作。