Проверить последнее обновление на правильный ответ
Я не понимаю, что вы пытаетесь сделать. Но из кода, показанного в вашем вопросе, я вижу, что вы вызываете метод Contains
userRole.Contains(item);
и я предполагаю, что вы пытаетесь найти item
в массиве Roles
Но в контексте аргумент, который вы взяли userRole
, не является массивом. Исправить вместо:
private static UserRoleModel[] GetUsersRole(Role usersRole)
вы должны написать:
private static UserRoleModel[] GetUsersRole(Role[] usersRole)
<Ч />
Обновление
Хорошо, я понял .. Проблема в том, что в Contains methofd вы ищете, передавая String
, где в массиве содержатся значения типа Role.
Таким образом, вопрос заключается в том, как найти экземпляр Enum в массиве экземпляров Enum из строкового представления экземпляра Enum
Обычно вы можете искать только по типу элементов в массиве, но здесь у вас есть строковое представление, так что можно сделать что-то подобное:
создать функцию:
public Role GetRole(string rolestring)
{
Role result;
foreach(string rolename in Enum.GetNames(typeof(Role)))
{
if(rolename == rolestring)
{
try
{
result = (Role) Enum.Parse(typeof(Role), rolename);
}
catch(ArgumentException e)
{
//Most unlikely we ever enter this catch s we know for sure we have role
//Process if role not found
throw;
}
}
}
return result;
}
тогда в вашем коде
UserRole = usersRole.Contains(GetRole(item));
<Ч />
Обновление
В типе Array отсутствует метод Contains
Хорошо, я понял .. Проблема в методе Contains, поскольку такого метода, как Contains для массивов типов, не существует, а для типа List<T>
Для массивов у нас есть Exists
, который принимает Predicate
в качестве аргумента для поиска и возврата bool
.
Используйте его следующим образом:
//just to be sure correct value is captured everytime
string copy = item;
//Predicate is in System.Predicate<T>
Predicate<string> predicate = itemtocheck => {
itemtocheck == copy;
};
UserRole = Array.Exists(Enum.GetNames(typeof(Role)), predicate);
<ч />
Мое первое обновление было правильным, но тогда я не заметил, что у массива нет метода Contains. Проверьте мой последний ответ правильный ответ
Надеюсь, это поможет