gpt4 book ai didi

c# - 如何从属性获取构造函数命名参数

转载 作者:行者123 更新时间:2023-12-04 08:38:10 25 4
gpt4 key购买 nike

我和 this question 有同样的问题.问题是,即使在属性的构造函数中使用命名参数时,我仍然得到一个空集合。
这是我的属性定义:

public class MenuItemAttribute : Attribute
{
ApplicationCategoryEnum ApplicationCategory { get; }
string ControllerDisplayName { get; }
bool IsDefaultRoute { get; }

public MenuItemAttribute(ApplicationCategoryEnum applicationCategory, string controllerDisplayName, bool isDefaultRoute)
{
ControllerDisplayName = controllerDisplayName;
ApplicationCategory = applicationCategory;
IsDefaultRoute = isDefaultRoute;
}
}
这就是我使用它的方式:
[MenuItem(
applicationCategory: ApplicationCategoryEnum.CONTROLPANEL,
controllerDisplayName: "Account Management",
isDefaultRoute: false)]
public class AccountController : Controller { /// }
这是我如何通过 Controller 的属性:
var attributeData = controllerInfo
.CustomAttributes
.FirstOrDefault(attrs => attrs.AttributeType == typeof(MenuItemAttribute))
.NamedArguments;
如果我使用 ConstructorArguments,我可以看到它们的参数。而不是 NamedArguments .
我错过了什么?

最佳答案

目前你所有的参数都是位置参数,所以它们在 ConstructorArguments 中返回。 .
docs 中所写:

Each non-static public read-write field and property for an attribute class defines a named parameter for the attribute class.


更改您的 MenuItemAttribute例如:
    public class MenuItemAttribute : Attribute
{
ApplicationCategoryEnum ApplicationCategory { get; }
public string ControllerDisplayName { get; set; }
public bool IsDefaultRoute { get; set; }

public MenuItemAttribute(ApplicationCategoryEnum applicationCategory)
{
ApplicationCategory = applicationCategory;
}
}
和用法
[MenuItem(ApplicationCategoryEnum.CONTROLPANEL, ControllerDisplayName = "asdsa", IsDefaultRoute = true)]
将为您提供 NamedArguments 中的 2 个元素收藏。

关于c# - 如何从属性获取构造函数命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64696816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com