Я использую ParseLambda
от System.Linq.DynamicExpression
namespace. Более подробную информацию можно найти на сайте ScottGu's blog.Передача Enum в качестве параметра в DynamicExpression
Следующий код бросает исключение Unknown identifier 'TeamType'
public bool CheckCondition()
{
try
{
var condition = "CurrentUser.CurrentTeamType == TeamType.Admin";
var currentUserParameter = Expression.Parameter(typeof(UserInfo), "CurrentUser");
var dynamicExpression = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { currentUserParameter}, null, condition);
var result = dynamicExpression.Compile().DynamicInvoke(CurrentUserInfo);
return Convert.ToBoolean(result);
}
catch(Exception ex)
{
// do some stuff then throw it again
throw ex;
}
}
public enum TeamType
{
Admin = 1,
AnotherType = 2
}
public class UserInfo
{
public short UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public TeamType CurrentTeamType { get; set; }
}
CurrentUserInfo
это всего лишь пример UserInfo
;
Мой вопрос: что я могу сделать так, TeamType
будет распознан или как передать параметр enum в качестве параметра.
Дополнительные исключения:
Если я изменить condition
к Convert.ToInt32(CurrentUser.CurrentTeamType) == 1
, я получаю следующее исключение Expression of type 'Namespace.TeamType' cannot be used for parameter of type 'System.Object' of method 'Int32 ToInt32(System.Object)'
Если изменить condition
к (int)CurrentUser.CurrentTeamType == 1
, я получаю следующее исключение Unknown identifier 'int'
Если добавить пространство имен тоже как var condition = "CurrentUser.CurrentTeamType == App.BE.TeamType.Admin";
, я получаю Unknown identifier 'App'
. Обратите внимание, что у меня есть ссылка на App.BE
namespace
Я попробовал, что в первом. Я обновлю свой вопрос –
Ссылка в классе бессмысленна, потому что вы отправляете строку. Используйте полное пространство имен так, как будто не используются «используемые» операторы. –
Обновлен мой вопрос. Я сделал это, но только написал 'BE' вместо' App.BE' –