2013-04-22 109 views
1

我有以下方法返回一個集合,然後我可以在MVC中構建一個下拉菜單。問題是,我想要替換集合中值的子字符串,但我不知道如何在C#中完成此操作(我是一個經典的VB人)。C#如何在集合上進行字符串替換方法?

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; 
    } 

} 

爲簡潔起見,上述內容已經過簡化。角色集合中的每個角色如下所示: SubUser SubAdmin SubManager。

我只是想回到 用戶 聯繫 經理

什麼是最好的辦法爲這個在C#中嗎?

我的猜測是我必須做一個foreach並替換每個循環的子字符串,並在移動到下一個項目之前重新填充該值。

如果你可以提供一個很好的代碼示例,因爲我似乎還在跳過語法問題。

非常感謝!

+0

對不起,我不明白你是什麼'rejectAdmin'什麼'roles'應該包含並且你想要替換什麼? – MoHaKa 2013-04-22 17:48:01

+0

該查詢列出了我不想在角色集合中返回的其他選項。你不需要擔心這一點。只要知道這個linq返回SubUser,SubAdmin,SubManager。但我希望這顯示爲用戶,管理員,經理。謝謝! – 2013-04-22 17:50:41

回答

2

你可以做到這一點與LINQ。

roles = UserRoles 
    .Where(x => x.Contains("Sub")) 
    .Except(rejectAdmin) 
    .Select(x => x.Replace("Sub", "")); 

編輯:請注意,此方法只替換所有的字符串的字符串「分」中出現的所有roles。這是一個非常寬泛的中風,如果你只想做你提到的替換,你可能需要使用不同的lambda函數。看到Romoku的帖子尋求幫助。

+0

謝謝你。我選擇了這個迴應,因爲它是我最初的代碼最接近的方法。這很好,可以在LINQ中處理。 – 2013-04-22 18:36:35

1

我會說,如果角色不會經常改變,然後做一個映射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柱內。

0
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(); 
} 
0
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變量如果不是你必須這樣做替換字符串集合

0

如果我理解你的問題是正確的,你需要刪除字符串中出現的「Sub」。如果您有其他條件,如「Sub」位於字符串的開頭,不區分大小寫等,您可以執行其他檢查。

其中一種方法是找到要刪除的字符串的索引,然後去掉。

var s = "SubUser"; 
var t = s.Remove(s.IndexOf("Sub"), "Sub".Length); 

或者,您也可以用空字符串替換要刪除的字符串。

var t = s.Replace("Sub", ""); 

希望有所幫助。

0

試試這個

List<string> x = new List<string>(); 
x.Add("SubUser"); 
x.Add("SubAdmin"); 
x.Add("SubManager"); 

var m = x.Select(y => y.Replace("Sub", "")); 
1

這將返回所有項目進行分開始,與子去除

IEnumerable<string> = UserRoles .Where(x => x.StartsWith("sub")) .Select(y => y.Remove(0,3));