你的阵列只能有一个值,因为它有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