我打算在不傳遞任何參數的情況下執行此操作!可能嗎?如何獲取屬性設置的屬性名稱?
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; } }
}
屬性是應用於類型成員,類型本身,方法參數或程序集的元數據。因爲你有機會獲得元數據,你必須有原成員本身用戶GetCustomAttributes
等,即你的Type
,例如PropertyInfo
,FieldInfo
等
在你的情況,我真的通過屬性的名稱屬性本身:
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來實現的是:http://msdn.microsoft.com/en-us/library/ms130869.aspx
好吧我知道有很多方法(像你的方法一樣),但沒有一個是我的情況。 – Sadegh 2011-01-06 05:32:46
使用CallerMemberNameAttribute從.NET 4.5:
public CustomAttribute([CallerMemberName] string propertyName = null)
{
// ...
}
太棒了。保存一個參數,我必須使用該參數來修飾整個項目的屬性。 – Ellesedil 2014-01-30 23:08:08
這應該是公認的答案,謝謝! – 2014-03-05 05:44:44
正在尋找這個,但不工作[與枚舉](http://stackoverflow.com/q/28094024/465942)不幸的.. – 2015-03-28 00:34:40
謝謝,我知道這可以通過傳遞屬性名稱來解決,我要做到這一點,而不傳遞屬性名稱。所以根據你的回答是不可能的。 – Sadegh 2011-01-05 17:32:01
不可能,屬性不會傳遞有關它們所連接成員的信息。如果'Attribute'實例通過了用於創建它的'ICustomAttributeProvider',但是很遺憾,情況並非如此。 – 2011-01-05 17:34:02
感謝馬修非常有用。 – Sadegh 2011-01-06 05:29:53