相关疑难解决方法(0)

属性和命名/可选构造函数参数不起作用

我有自定义属性,如下所示:

  [AttributeUsage(AttributeTargets.Field)]
  public class EnumDisplayAttribute : Attribute
  {
    public string Description { get; private set; }
    public string Code { get; private set; }

    public EnumDisplayAttribute(string description = null, string code = null)
    {
      Description = description;
      Code = code;
    }
  }
Run Code Online (Sandbox Code Playgroud)

两个构造函数参数都是可选的.

在像这样的字段上使用此属性时

  public enum TransactionType
  {
    [EnumDisplay(code: "B")] 
    Bill,
    [EnumDisplay(description: null, code: "C")]
    CashReceipt,
  }
Run Code Online (Sandbox Code Playgroud)

我没有在代码编辑器中看到任何波形,但我看到一个模糊的错误,没有任何文件行号列.错误消息是:

错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

单击该错误不会执行任何操作.也就是说,您不会导航到错误站点(显然,因为没有行号和列).

即使我像这样设置属性:

[EnumDisplay("This is a Bill")] 
Run Code Online (Sandbox Code Playgroud)

编译器不喜欢它.

实际上,我被迫提供两个参数(已命名或未命名),以便将此属性用作属性.

当然,如果我将此属性用作常规类,如下所示:

var enumDisplayAttribute = new EnumDisplayAttribute();
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a …
Run Code Online (Sandbox Code Playgroud)

c# custom-attributes

22
推荐指数
2
解决办法
2万
查看次数

在属性构造函数中使用可选参数时,属性参数必须是常量错误

谁能解释为什么这段代码有效:

public class AdministratorSettingValidationAttribute : Attribute
{
    public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType)
    {
        DataType = administratorSettingDataType;
    }

    public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType)
    {
        DataType = administratorSettingDataType;
        EnumerationType = enumerationType;
    }
}
Run Code Online (Sandbox Code Playgroud)

...但重构它以使用可选参数:

    public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType = null)
    {
        DataType = administratorSettingDataType;
        EnumerationType = enumerationType;
    }
Run Code Online (Sandbox Code Playgroud)

...导致编译时错误:" 属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式 ".

.net c# visual-studio-2010

17
推荐指数
2
解决办法
4769
查看次数

ASP.NET MVC3 + ActionFilterAttribute +注入?

嘿那里,我已经成功地在我的FilterAttribute中使用了属性注入,但是我想知道它是否可以将它移动到构造函数中呢?

我目前的代码:

// AuthAttribute.cs

public class AuthAttribute : ActionFilterAttribute
{
    public Roles _authRoles { get; private set; }

    [Inject]
    private readonly IAuthorizationService _service;

    public AuthAttribute(Roles roles)
    {
        _authRoles = roles;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            string redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath;
            string redirectUrl = string.Format("?returnUrl={0}", redirectOnSuccess);
            string loginUrl = FormsAuthentication.LoginUrl + redirectUrl;

            filterContext.HttpContext.Response.Redirect(loginUrl, true);
        }
        else
        {
            bool isAuthorized = _service.Authorize(GetUserSession.Id, _authRoles.ToString());

            if (!isAuthorized)
            {
                // TODO: Make custom "Not Authorized" error page.
                throw new UnauthorizedAccessException("No access"); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net dependency-injection actionfilterattribute asp.net-mvc-3

10
推荐指数
2
解决办法
6289
查看次数