Tag: reflection

在运行时生成的属性(PropertyGrid.SelectedObject)

好的,这是一个艰难的。 简介:我的想法是将我编写的instanciated QueryBuilder类附加到PropertyGrid。 QueryBuilder类现在包含几个字段,这些字段是硬编码的,如下例所示。 从而允许用户指定应以何种方式在查询中使用哪些字段(排序,分组等)。 在用户为这些属性指定了所有设置后(通过代码或通过PropertyGrid GUI),QueryBuilder能够生成查询。 一切都很好。 伪代码: class QueryBuilder { public QBField name {get; set;} public QBField prename {get; set;} public QBField zip {get; set;} // … public void QueryBuilder() { name = new QBField(); prename = new QBField(); // … } public getQuery() { // logic to build the query } } […]

如何通过Reflection 设置对象属性

我正在尝试编写一个接受以下3个参数的方法: 一个Object(用户定义的类型会有所不同) 表示该对象的属性名称的字符串 字符串值,在分配之前必须从字符串转换为属性的数据类型。 方法签名如下所示: public void UpdateProperty(Object obj, string propertyName, string value) 我已经找到了如何使用以下代码检索属性值: PropertyInfo[] properties = target.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (PropertyInfo prop in properties) { if (string.Compare(prop.Name, propertyName, true) == 0) { return prop.GetValue(target, null).ToString(); } } 问题是我无法弄清楚如何设置属性值。 此外,该值以字符串forms出现,因此我必须根据属性的数据类型检查值的数据类型,然后才能进行转换和分配。 任何帮助将不胜感激。

C#不能从generics方法调用重载的非generics方法

我有一些遗留代码,方法foo有700多个重载: [DllImport(“3rdparty.dll”)] protected static extern void foo(int len, ref structA obj); [DllImport(“3rdparty.dll”)] protected static extern void foo(int len, ref structB obj); [DllImport(“3rdparty.dll”)] protected static extern void foo(int len, ref structC obj); //and 700 similar overloads for foo… 我想通过使用generics的单个方法公开这些重载方法: public void callFoo(int len) where T : new() //ensure an empty constructor so it can be activated […]

按类名获取程序集

有没有办法让包含名为TestClass的类的程序集? 我只知道类名,所以我无法创建它的实例。 和 Type objectType = assembly.GetType(“TestClass”); 对我不起作用。

寻找WPF的对象图树视图控件

我正在尝试查找代码或预先打包的控件,它采用对象图并在TreeView中显示属性的公共属性和值(递归)。 即使是天真的实现也没问题,我只需要一些东西就可以了。 解决方案必须是WPF,而不是winforms或com等…

MethodInfo调用方法

我想调用具有某个属性的方法。 所以我循环遍历所有程序集和所有方法以使用我的属性查找方法。 工作正常,但是当我得到它的MethodInfo时,如何调用某个方法。 AppDomain app = AppDomain.CurrentDomain; Assembly[] ass = app.GetAssemblies(); Type[] types; foreach (Assembly a in ass) { types = a.GetTypes(); foreach (Type t in types) { MethodInfo[] methods = t.GetMethods(); foreach (MethodInfo method in methods) { // Invoke a certain method } } } 问题是我不知道包含该特定方法的类的实例。 所以我无法正确调用它,因为这些方法不是静态的。 我还想避免在可能的情况下创建此类的新实例。

如何使用局部变量作为类型? 编译器说“它是一个变量但是像一个类型一样使用”

我有一些代码…… 在运行时环境中,我们不知道v1变量是什么类型的! 出于这个原因,我们应该多次写“if else”语句! if (v1 is ShellProperty) { v2 = (v1 as ShellProperty).Value; } else if (v1 is ShellProperty) { v2 = (v1 as ShellProperty).Value; } else if (v1 is ShellProperty) { v2 = (v1 as ShellProperty).Value; } else if (v1 is ShellProperty) { v2 = (v1 as ShellProperty).Value; } 我写了4次! 区别仅在于ShellProperty 所以不要使用“if else […]

PropertyInfo实例上的SetValue错误“对象与目标类型不匹配”c#

在以前的项目中的各个地方使用带有此代码的Copy方法(处理具有相同命名属性但不从公共基类派生或实现公共接口的对象)。 新的工作场所,新的代码库 – 现在它在SetValue失败,“对象与目标类型不匹配”,即使是非常简单的例子……它上周工作了…. public static void Copy(object fromObj, object toObj) { Type fromObjectType = fromObj.GetType(); Type toObjectType = toObj.GetType(); foreach (System.Reflection.PropertyInfo fromProperty in fromObjectType.GetProperties()) { if (fromProperty.CanRead) { string propertyName = fromProperty.Name; Type propertyType = fromProperty.PropertyType; System.Reflection.PropertyInfo toProperty = toObjectType.GetProperty(propertyName); Type toPropertyType = toProperty.PropertyType; if (toProperty != null && toProperty.CanWrite) { object fromValue = […]

.NETreflection:查找使用的类型

我一直在努力解决这个问题。 我试图做的是在我正在处理的一些代码中构建一个如何使用对象的“映射”。 将其视为增强的查找用法。 显示这个的最简单方法是通过示例: public class MasterClass { Type1 type1; Type2 type2; Type3 type3; void InitializeData() { type1 = new Type1(this); type2 = new Type2(this); type3 = new Type3(this); } } public class Type1 { private MasterClass _master; public Type1(MasterClass master) { _master = master; } public void Something() { //use _master.type2 and _master.type3 here […]

在Silverlight的扩展方法中使用reflection进行深层复制?

所以我试图找到一个通用的扩展方法,它使用reflection创建一个对象的深层副本,可以在Silverlight中使用。 使用序列化的深层复制在Silverlight中并不是那么好,因为它以部分信任方式运行并且BinaryFormatter不存在。 我也知道,reflection会比克隆序列化更快。 有一个方法可以复制公共,私有和受保护的字段,并且是递归的,这样它就可以复制对象中的对象,并且还可以处理集合,数组等。 我在线搜索,只能使用reflection找到浅拷贝实现。 我不明白为什么,因为你可以使用MemberwiseClone,所以对我来说,这些实现是没用的。 谢谢。