Tag: reflection

定制,复杂,动态reflection解决方案 – C#

我有很多我正在使用的自定义类,我将解释并发布示例。 在解释他们所做的一切之后,我将尝试清楚地描述我的错误发生的条件。 首先,我使用PropertyGrid来显示几种不同类型对象的属性。 因为PropertyGrid的默认绑定不是我想要的描述,我创建了一些自定义类,我将其称为“显示”类。 这些Display类是通过传入一个对象然后创建属性来构造的,这些属性返回格式良好的字符串以及传入的真实对象的公共属性(在某些情况下是方法)的描述。 我将用一些简短的示例代码演示这个: 以下是我想在PropertyGrid中显示的对象示例: public class Joint { public Joint(…) {…} //properties public string Name { get; set;} public CustomObject CC { get; set;} public List Custom List { get; set;} } 字符串属性“Name”在PropertyGrid中显示正常但是CustomObject和List没有以对用户友好的方式显示。 所以我尝试通过编写这个类来创建一个解决方案: public class DisplayJoint { private Joint _jnt; public DisplayJoint(Joint jnt) { _jnt = jnt; } //properties public string […]

通过Object自己的Strings&Trim迭代

我有多个大对象,每个对象有大约60个字符串。 我必须修剪所有这些字符串,我想这样做而不必去this.mystring = this.mystring.Trim()。 相反,我正在寻找一种方法来自动让每个对象发现自己的字符串,然后执行操作。 我对反思有点了解,但还不够,但我认为这是可能的吗? 另外,我不确定这是否重要,但是一些字符串属性是只读的(只有一个getter),因此必须跳过这些属性。 救命?

如何通过reflection代码(c#)设置可空类型?

我需要使用reflection设置类的属性。 我有一个Dictionary带有属性名和字符串值。 在reflection循环中,我需要在为每个属性设置值时将字符串值转换为适当的属性类型。 其中一些属性类型是可空类型。 如果属性是可以为空的类型,我怎么能从PropertyInfo中知道? 如何使用reflection设置可空类型? 编辑:在这个博客的评论中定义的第一个方法似乎也可以做到这一点: http : //weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx

从getType()中排除属性.GetProperties()

嗨我正在使用C#在类库中工作,我有一些带有一些属性的类。 我只想知道我是否可以添加一些内容来从getType()中排除一些属性.GetProperties()。 我想要的一个例子: 课堂考试 { public string one { get; set; } public string two {get ; set;} } 如果我这样做: static void Main(string [] args) { Test t = new Test(); Type ty = t.GetType(); PropertyInfo[] pinfo = ty.GetProperties(); foreach (PropertyInfo p in pinfo) { Console.WriteLine(p.Name); } } 我希望输出是这样的: 一 或只是其中一个属性。 有可能做那样的事吗? 我不知道C#中是否有某种修饰符或注释,这使我能够按照自己的意愿行事。 谢谢。

检测对象的类型是否为.NET Framework定义的类型

如何通过reflection确定对象的类型是由我自己的程序集中的类还是由.NET Framework定义的? 我不想在代码中提供我自己的程序集的名称,因为它应该适用于任何程序集和命名空间。

从HTML帮助程序中提取显示名称和描述属性

我正在构建一个自定义HTML.LabelFor帮助器,如下所示: public static MvcHtmlString LabelFor(this HtmlHelper self, Expression<Func> expression, Boolean showToolTip) { var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData); … } 为了能够获得属性的正确名称,我使用以下代码: metadata.DisplayName 在ModelView类的属性上,我得到了: [DisplayName(“Titel”)] 问题是我还需要一个描述。 有一个名为Display的属性,它有名称和描述,但我没有看到如何使用上面代码中的元数据变量提取它?

Reflect.Emit Dynamic Type Memory Blowup

使用C#3.5我试图在运行时使用reflection发射生成动态类型。 我使用Microsoft的Dynamic Query Library示例创建了一个类生成器。 一切正常,我的问题是100个生成的类型使内存使用量膨胀大约25MB。 这是一个完全不可接受的内存配置文件,因为最终我想支持在内存中生成数十万种类型。 内存分析显示内存显然是由各种System.Reflection.Emit类型和方法持有,虽然我无法弄清楚原因。 我没有找到其他人谈论这个问题所以我希望这个社区中的某个人知道我做错了什么或者这是否是预期的行为。 下面的受控示例: using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Reflection.Emit; namespace SmallRelfectExample { class Program { static void Main(string[] args) { int typeCount = 100; int propCount = 100; Random rand = new Random(); Type dynType = null; SlimClassFactory scf = new SlimClassFactory(); for (int i […]

C#反思:更新房产价值的最快方法?

这是使用reflection更新属性的最快方法吗? 假设该属性始终为int: PropertyInfo counterPropertyInfo = GetProperty(); int value = (int)counterPropertyInfo.GetValue(this, null); counterPropertyInfo.SetValue(this, value + 1, null);

使用Reflection设置类型为List 的Property

如何使用reflection创建具有自定义类(List )的通用List? 我需要能够添加值并使用propertyInfo.SetValue(…, …, …)来存储它。 将这些List 存储为其他数据结构会更好吗? 编辑: 我应该指定对象更像是这样,但Marc Gravell的答案仍然有用。 class Foo { public List Bar { get; set; } }

有没有一种简单的方法可以将对象属性转换为字典

我有一个数据库对象(一行),它有许多映射到表单字段的属性(列) (asp:textbox,asp:dropdownlist等) 。 我想将此对象和属性转换为字典映射,以便更容易迭代。 例: Dictionary FD = new Dictionary(); FD[“name”] = data.name; FD[“age”] = data.age; FD[“occupation”] = data.occupation; FD[“email”] = data.email; ………. 如果不手动输入所有不同的100个属性,我怎么能这么做呢? 注意:FD字典索引与数据库列名称相同。