你的陣列只能有一個值,因爲它有1.增量的長度緩解其使用string[] mt = new string[2];
然後你就可以減少一些重複,因爲你始終分配「基本設置」,然後甩掉多餘的空支票的2尺寸:
string[] mt = new string[2] {"Basic", null};
switch (n)
{
case 1:
mt[1] = "Reader";
break;
case 2:
mt[1] = "Blogger";
break;
case 3:
mt[1] = "Editor";
break;
default: break;
}
result = await UserManager.AddToRolesAsync(user.Id, mt);
但是:我建議一個不同的更清晰的方法:
//create a dictionary with all roles
var roleDic = new Dictionary<int, string> {
{1, "Reader"},
{2, "Blogger"},
{3, "Editor"},
};
//get the role that matches your n variable
var newRole = roleDic.FirstOrDefault (d => d.Key == n).Value;
//create the array for the UserManager
var roles = !String.IsNullOrEmpty(newRole) ? new [] {"Basic", newRole} : new[] {"Basic"};
result = await UserManager.AddToRolesAsync(user.Id, roles);
如果你想給每個用戶添加多個角色和正變得int
值的集合,這成爲:
var roleDic = new Dictionary<int, string> {
{1, "Reader"},
{2, "Blogger"},
{3, "Editor"},
{4, "SuperUser"},
{5, "Administrator"},
{6, "BackupAdmin"}
};
var rolestoAdd = new List<int> { 2, 4};
var newRoles = roleDic.Where(x => rolestoAdd.Contains(x.Key))
.Select (x => x.Value);
var roles = new List<string> {"Basic"};
roles.AddRange(newRoles);
result = await UserManager.AddToRolesAsync(user.Id, roles.ToArray());
通過這種方式,您可以爲自己節省一個笨拙的開關語句,這種語句可能會在幾頁之後增長,一旦您碰到20個左右的角色。另外你已經從你的邏輯中分離出你的角色定義,並且(imho)它更具可讀性。 (其他人可能會發現一個巨大的開關或if-else塊更簡潔,這取決於你。)
你的代碼試圖訪問你的數組中的第一個和第二個項目。但是你的數組長度是多少?看起來它只有1個。這就是你得到這個錯誤的原因。你的數組只有一個項目,並且你正在嘗試訪問第二個項目! – Shyju