情况
我想显示多个类的所有常规属性。可以说有一个具有属性“ a”和“ c”的类“ A”,还有一个具有属性“ b”和“ c”的类“ B”……所以我基本上想得到属性“ c”
有没有简单的方法可以做到这一点?
编辑
对不起,我没有告诉我编程的内容。
我基本上有一个类列表,并且我想获得这些类具有的所有属性。
我的代码只是我尝试过的证明。
真实示例:Visual Studio
如果选择2个按钮,那么你将看到所有属性,这些按钮具有一起
代码
private void GetAllProperties(ObservableCollection<DUIElement> selecteditems)
{
if (selecteditems == null)
return;
_properties.Clear();
foreach (DUIElement item in selecteditems)
foreach (PropertyInfo property in item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
if (property.PropertyType.Name != nameof(DPropertyViewModel))
continue;
foreach (DUIElement itemnext in selecteditems)
{
if (item.GroupName == itemnext.GroupName)
continue;
foreach (PropertyInfo propertynext in itemnext.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
if (propertynext.PropertyType.Name != nameof(DPropertyViewModel))
continue;
if (property.PropertyType.Name == propertynext.PropertyType.Name)
{
var prop = propertynext.GetValue(itemnext, null) as DPropertyViewModel;
_properties.Add(prop);
}
}
}
}
}
答案 0 :(得分:0)
执行此操作的一种方法是构建所有枚举项中存在的属性的列表:
List<string> Properties = null;
foreach (DUIElement item in selecteditems)
{
// Check for first iteration
if (Properties == null)
{
// Get name of properties from first iteration
Properties = new List<string>();
foreach (PropertyInfo item in item.GetType().GetProperties().ToList<PropertyInfo>())
Properties.Add(item.Name);
}
else
{
// Check properties from current iteration
foreach (PropertyInfo property in item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
// Remove properties where they do not exist in current property list
if (!Properties.Contains(property.Name))
Properties.Remove(property.Name);
}
}
}
这有效地复制了第一项中的所有属性,然后删除了其余迭代中不存在的所有属性。
生成的属性名称将以Properties
结尾。
我不确定您是否仅需要属性名称,或者实际上是否需要PropertyInfo
。但是,您可以简单地使用Properties
列表来匹配PropertyInfo
中第一个对象中的selecteditems
。