C# 如何获取设置了属性的属性的名称?

C# 如何获取设置了属性的属性的名称?,c#,reflection,attributes,C#,Reflection,Attributes,我将在不向属性传递任何参数的情况下执行此操作!可能吗 class MyAtt : Attribute { string NameOfSettedProperty() { //How do this? (Would be MyProp for example) } } class MyCls { [MyAtt] int MyProp { get { return 10; } } } 属性是应用于类型成员、类型本身、方法参数或程序集的元数据。要访问

我将在不向属性传递任何参数的情况下执行此操作!可能吗

class MyAtt : Attribute {
    string NameOfSettedProperty() {
        //How do this? (Would be MyProp for example)
    }
}

class MyCls {
    [MyAtt]
    int MyProp { get { return 10; } }
}

属性是应用于类型成员、类型本身、方法参数或程序集的元数据。要访问元数据,必须将原始成员本身设置为user
GetCustomAttributes
等,即
类型
属性信息
字段信息
等的实例

在您的情况下,我实际上会将属性的名称传递给属性本身:

public CustomAttribute : Attribute
{
  public CustomAttribute(string propertyName)
  {
    this.PropertyName = propertyName;
  }

  public string PropertyName { get; private set; }
}

public class MyClass
{
  [Custom("MyProperty")]
  public int MyProperty { get; set; }
}

不能在属性类本身内执行此操作。但是,您可以使用一个方法来获取对象,并获取该对象使用该属性的属性(如果有)的列表。使用此API实现以下功能:

使用.NET 4.5:

public CustomAttribute([CallerMemberName] string propertyName = null)
{
    // ...
}

谢谢,我知道这可以通过传递属性名来解决,我将在不传递属性名的情况下执行此操作。因此,根据您的响应,这是不可能的。不可能的是,属性不会传递有关它们所附加到的成员的信息。如果
属性
实例被传递给用于创建它的
ICCustomAttributeProvider
,那么它会很方便,但遗憾的是,事实并非如此。此注释已过时。如果使用.NET4.5OK,请参见下文。我知道有很多方法(其中一种方法与您的方法类似),但这些都不是我的情况。太棒了。为一个属性保存一个参数,我将不得不使用该属性在整个项目中装饰属性。正在查找此参数,但不幸的是,该参数无效。。