确定 属性 集合属于什么
Determine what property a collection belongs to
我创建了一个小测试。我怎样才能知道,也许在 void Add(T t) 内部使用反射,集合属于什么 属性?我想通过 PropertyInfo 以编程方式获取 属性 名称 'MyVotes'。
void Main()
{
var myClass = new MyClass();
myClass.MyVotes.Add("Democratic");
myClass.MyVotes.Add("Republican");
myClass.MyVotes.Add("Independent");
}
public class MyClass
{
public MyCollection<string> MyVotes { get; }
public MyClass()
{
MyVotes = new MyCollection<string>();
}
}
public class MyCollection<T> : ObservableCollection<T>
{
public new void Add(T t)
{
base.Add(t);
// how do I find out what property name this collection is within MyClass object?
}
}
看起来您可以完全控制源,所以我建议您通过构造函数参数将您需要的信息传递到集合中。
public class MyClass
{
public MyCollection<string> MyVotes { get; }
public MyClass()
{
MyVotes = new MyCollection<string>(nameof(MyVotes));
}
}
public class MyCollection<T> : ObservableCollection<T>
{
private readonly string _propertyName;
public MyCollection(string propertyName) => _propertyName = propertyName
public new void Add(T t)
{
base.Add(t);
Console.WriteLine($"Using {_propertyName}");
}
}
我在这里使用 nameof
来确保重构安全。如果您需要传递的不仅仅是 属性 名称,例如PropertyInfo
,你可以这样做。
我创建了一个小测试。我怎样才能知道,也许在 void Add(T t) 内部使用反射,集合属于什么 属性?我想通过 PropertyInfo 以编程方式获取 属性 名称 'MyVotes'。
void Main()
{
var myClass = new MyClass();
myClass.MyVotes.Add("Democratic");
myClass.MyVotes.Add("Republican");
myClass.MyVotes.Add("Independent");
}
public class MyClass
{
public MyCollection<string> MyVotes { get; }
public MyClass()
{
MyVotes = new MyCollection<string>();
}
}
public class MyCollection<T> : ObservableCollection<T>
{
public new void Add(T t)
{
base.Add(t);
// how do I find out what property name this collection is within MyClass object?
}
}
看起来您可以完全控制源,所以我建议您通过构造函数参数将您需要的信息传递到集合中。
public class MyClass
{
public MyCollection<string> MyVotes { get; }
public MyClass()
{
MyVotes = new MyCollection<string>(nameof(MyVotes));
}
}
public class MyCollection<T> : ObservableCollection<T>
{
private readonly string _propertyName;
public MyCollection(string propertyName) => _propertyName = propertyName
public new void Add(T t)
{
base.Add(t);
Console.WriteLine($"Using {_propertyName}");
}
}
我在这里使用 nameof
来确保重构安全。如果您需要传递的不仅仅是 属性 名称,例如PropertyInfo
,你可以这样做。