C#如何对集合执行字符串替换方法
本文关键字:字符串 替换 方法 执行 集合 | 更新日期: 2023-09-27 18:10:25
我有下面的方法,它返回一个集合,这样我就可以从MVC中构建一个下拉菜单。问题是,我想在集合中的值中替换子字符串,但我不确定如何在C#中这样做(我是一个经典的vb爱好者(。
public class RolesManagement
{
public static IEnumerable<string> BuildRoles(string DesiredRole)
{
var UserRoles = Roles.GetAllRoles();
IEnumerable<string> roles;
roles = UserRoles.Where(x => x.Contains("Sub")).Except(rejectAdmin);
return roles;
}
}
为了简洁起见,以上内容已被简化。角色集合中的每个角色如下所示:子用户SubAdmin副经理。
我只是想回来使用者管理经理
在C#中,最好的方法是什么?
我的猜测是,在移动到下一项之前,我必须执行foreach并替换每个循环上的子字符串,并重新填充值。
如果你能提供一个代码示例,那就太好了,因为我似乎仍然会被语法问题绊倒。
非常感谢!
使用LINQ可以做到这一点。
roles = UserRoles
.Where(x => x.Contains("Sub"))
.Except(rejectAdmin)
.Select(x => x.Replace("Sub", ""));
编辑:请注意,此方法只是替换roles
中所有字符串中出现的所有字符串"Sub"。这是一个非常宽泛的笔划,如果你只想做你提到的替换,你可能需要使用不同的lambda函数。请参阅Romoku的帖子以获得帮助。
我想说,如果角色不会经常更改,那么就制作一个映射Dictionary
。
public class RolesManagement
{
private static readonly Dictionary<string,string> RoleMapping =
new Dictionary<string,string>
{
{"SubUser", "User" },
{"SubManager", "Manager" },
{"SubAdmin", "Admin" }
};
public static IEnumerable<string> BuildRoles(string DesiredRole)
{
var UserRoles = Roles.GetAllRoles();
IEnumerable<string> roles;
roles = UserRoles.Where(x => x.Contains("Sub")).Except(rejectAdmin);
return roles.Select(r => RoleMapping.ContainsKey(r) ? RoleMapping[r] : r);
}
}
或者将它们作为FriendlyName
列存储在数据库中。
这将返回所有以sub开头的项目,其中sub已删除
IEnumerable<string> = UserRoles
.Where(x => x.StartsWith("sub"))
.Select(y => y.Remove(0,3));
public static IEnumerable<string> GetCorrectedRoleNames(IEnumerable<string> roles)
{
List<string> correctedRoles = new List<string>();
foreach (string role in roles)
correctedRoles.Add(Regex.Replace(role, "Sub", string.Empty));
return correctedRoles.AsEnumerable();
}
public static IEnumerable<string> BuildRoles(string DesiredRole)
{
var UserRoles = Roles.GetAllRoles();
IEnumerable<string> roles;
roles = UserRoles.Where(x => x.Contains("Sub")).Except(rejectAdmin).Select(x=>x.Replace("Sub","");
return roles;
}
我假设x是string
变量,如果不是的话,你必须在字符串集合
如果我理解你的问题,你需要删除字符串中出现的"Sub"。如果你有其他条件,比如"Sub"在字符串的开头,不区分大小写,你可以做额外的检查。
其中一种方法是找到要删除的字符串的索引,然后再删除。
var s = "SubUser";
var t = s.Remove(s.IndexOf("Sub"), "Sub".Length);
或者,也可以将要删除的字符串替换为空字符串。
var t = s.Replace("Sub", "");
希望能有所帮助。
试试这个
List<string> x = new List<string>();
x.Add("SubUser");
x.Add("SubAdmin");
x.Add("SubManager");
var m = x.Select( y => y.Replace("Sub", ""));