C # Membro fortemente attributo per descrivere la proprietà

Mi chiedevo se fosse ansible dichiarare una proprietà di un attributo che descrive una proprietà in modo da richiedere una digitazione così forte e idealmente che intellisense potesse usare per selezionare la proprietà. Class Type funziona bene dichiarando il membro come Type Type Ma come ottenere la proprietà come parametro in modo che “PropName” non sia quotato ed è fortemente digitato?

Finora: la class Attibute e l’utilizzo del campione è simile

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] public class MyMeta : Attribute{ public Type SomeType { get; set; } // works they Way I like. // but now some declaration for a property that triggers strong typing // and ideally intellisense support, public PropertyInfo Property { get; set; } //almost, no intellisence type.Prop "PropName" is required public ? SomeProp {get;set;} // <<<<<<< any ideas of nice type to define a property } public class Example{ [MyMeta(SomeType = typeof(SomeOtherClass))] //is strongly typed and get intellisense support... public string SomeClassProp { get; set; } [MyMeta(SomeProp = Class.Member)] // <<< would be nice....any ideas ? public string ClassProp2 { get; set; } // instead of [MyMeta(SomeProp = typeof(T).GetProperty("name" )] // ... not so nice public string ClassProp3 { get; set; } } 

EDIT: per evitare di utilizzare stringhe del nome della proprietà, ho creato uno strumento semplice per conservare i controlli del tempo di compilazione durante l’archiviazione e l’utilizzo di nomi di proprietà in luoghi come stringhe.

L’idea è che si fa rapidamente riferimento a una proprietà tramite il suo tipo e il nome con l’aiuto intellisense e il completamento del codice da come resharper. Tuttavia, passa in STRING a uno strumento.

 I use a resharper template with this code shell string propname = Utilites.PropNameAsExpr( (SomeType p) => p.SomeProperty ) 

che si riferisce a

 public class Utilities{ public static string PropNameAsExpr(Expression<Func> prop) { //var tname = typeof(TPoco); var body = prop.Body as System.Linq.Expressions.MemberExpression; return body == null ? null : body.Member.Name; } } 

No, non è ansible. Puoi usare typeof per il nome del tipo, ma devi usare una stringa per il nome del membro. Questo è il massimo che puoi ottenere:

 [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] public class MyMeta : Attribute{ public Type SomeType { get; set; } public string PropertyName {get;set;} public PropertyInfo Property { get { return /* get the PropertyInfo with reflection */; } } } public class Example{ [MyMeta(SomeType = typeof(SomeOtherClass))] //is strongly typed and get intellisense support... public string SomeClassProp { get; set; } [MyMeta(SomeType = typeof(SomeOtherClass), PropertyName = "SomeOtherProperty")] public string ClassProp2 { get; set; } }