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并替换每个循环上的子字符串,并重新填充值。

如果你能提供一个代码示例,那就太好了,因为我似乎仍然会被语法问题绊倒。

非常感谢!

C#如何对集合执行字符串替换方法

使用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", ""));