我得到以下代码来生成DLL:
public class QtObject : DependencyObject
{
public int speedSimu
{
get { return (int)GetValue(speedSimuProperty); }
set { SetValue(speedSimuProperty, value); }
}
public static readonly DependencyProperty speedSimuProperty =
DependencyProperty.Register("speedSimu", typeof(int), typeof(QtObject), new PropertyMetadata(0));
public int rpmSimu
{
get { return (int)GetValue(rpmSimuProperty); }
set { SetValue(rpmSimuProperty, value); }
}
public static readonly DependencyProperty rpmSimuProperty =
DependencyProperty.Register("rpmSimu", typeof(int), typeof(QtObject), new PropertyMetadata(0));
public int nbSimu;
}
public class Timer : DependencyObject
{
public string description
{
get { return (string)GetValue(descriptionProperty); }
set { SetValue(descriptionProperty, value); }
}
public static readonly DependencyProperty descriptionProperty =
DependencyProperty.Register("description", typeof(string), typeof(Timer), new PropertyMetadata("This is a time"));
public bool isActive
{
get { return (bool)GetValue(isActiveProperty); }
set { SetValue(isActiveProperty, value); }
}
public static readonly DependencyProperty isActiveProperty =
DependencyProperty.Register("isActive", typeof(bool), typeof(Timer), new PropertyMetadata(true));
}
public class AnotherClass
{
//blaaa
}
我现在只想获得DependencyObject / Properties。 (即没有属性“nbSimu”且没有对象“AnotherClass”)
这是我的代码:
var library = Assembly.LoadFrom(libraryPath);
IEnumerable<Type> types = library.GetTypes();
var libs = types.Where(t => true);
foreach (Type type in libs)
{
foreach (PropertyInfo property in type.GetProperties())
{
//TODO
}
}
在第3行,我试过:
var libs = types.Where(t => t.BaseType == typeof(DependencyObject));
它没有说出任何错误,但没有过滤任何内容......
关于过滤DependencyProperties,我对如何做到这一点没有任何想法......
在这两个问题上提前感谢您的任何帮助。
答案 0 :(得分:0)
var libs = types.Where(t => t.IsSubclassOf(typeof(DependencyObject)));
应该有用。
答案 1 :(得分:0)
它适用于我的comp。
public class A : DependencyObject
{
public string Name { get; set; }
public int speedSimu
{
get { return (int)GetValue(speedSimuProperty); }
set { SetValue(speedSimuProperty, value); }
}
public static readonly DependencyProperty speedSimuProperty =
DependencyProperty.Register("speedSimu", typeof(int), typeof(A), new PropertyMetadata(0));
public int rpmSimu
{
get { return (int)GetValue(rpmSimuProperty); }
set { SetValue(rpmSimuProperty, value); }
}
public static readonly DependencyProperty rpmSimuProperty =
DependencyProperty.Register("rpmSimu", typeof(int), typeof(A), new PropertyMetadata(0));
}
public class B : A
{
public int Age { get; set; }
}
private static void Main(string[] args)
{
var assembly = Assembly.GetExecutingAssembly();
var types = assembly.GetTypes();
var filterTypes = types.Where(t => typeof (DependencyObject).IsAssignableFrom(t)).ToList(); // A and B
Func<string, string> mapFieldToProperty =
field => field.EndsWith("Property") ? field.Remove(field.IndexOf("Property")) : field;
foreach (var type in filterTypes)
{
var depFields =
type.GetFields(BindingFlags.Public | BindingFlags.Static).Where(
f => typeof (DependencyProperty).IsAssignableFrom(f.FieldType)).ToList(); // speedSimuProperty and rpmSimuProperty
var depPropertyNames = depFields.ToLookup(f => mapFieldToProperty(f.Name));
var depProperties =
type.GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(
prop => depPropertyNames.Contains(prop.Name)).ToList(); // speedSimu and rpmSimu
foreach (var property in depProperties)
{
// TODO
}
}
return;
}
第二个问题怎么样?你应该继续命名属性/字段的约定