Tag: reflection

PropertyInfo.DeclaringType真的可以为null吗?

我正在使用ReSharper(旧版本),当我使用PropertyInfo.DeclaringType时它曾警告我它可以为null 。 在第一眼和第二眼看来,这对我没有意义。 这是真的,还是ReSharper有点愚蠢,并没有注意到它是一个PropertyInfo ,而不是一般的MemberInfo ?

从给定的Type创建表达式<Func >

我希望通过在代码中构建表达式动态地使用CsvHelper,代码表示给定类型的属性成员访问。 我试图传递这些表达式的方法具有以下签名: public virtual CsvPropertyMap Map( Expression<Func> expression ) { // } 因此,您通常会调用它,对于您要映射的任何给定类型,如下所示(对于具有名为’stringProperty’的属性的类型): mapper.Map(x => x.StringProperty); 传入lambda,内部转换为Expression<Func> 我试图使用表达式在代码中创建此表达式。 在编译时它一切正常(因为它返回一个Expression<Func> ),但在运行时我得到一个exception’不是成员访问’。 这是一个代码,它接受一个PropertyInfo对象来表示我想要映射的属性: private Expression<Func> CreateGetterExpression( PropertyInfo propertyInfo ) { var getter = propertyInfo.GetGetMethod(); Expression<Func> expression = m => getter.Invoke( m, new object[] { } ); return expression; } 基本上,我如何在代码中正确构建表达式?

使用reflection从bin文件夹加载多个dll

我正在编写一个应用程序,我需要所有commandIds的集合。 这些存在于多个dll中。 我可以访问bin文件夹。 我使用reflection,并且能够一次为一个dll做这个 Assembly a = System.Reflection.Assembly.LoadFrom(@”T:\Bin\Commands.dll”); IEnumerable types = Helper.GetLoadableTypes(a); foreach (Type type in types) { FieldInfo ID = type.GetField(“ID”); if (ID != null) { string fromValue = (ID.GetRawConstantValue().ToString()); ListFromCSFiles.Add(fromValue); } } 我的问题是我需要从所有dll获取所有ID。 Bin文件夹也包含dll以外的文件。

使用标记为“内部”的外部程序集的接口(C#)

我想实现一个驻留在外部程序集中的接口。 但是,该特定接口已标记为“内部”。 有没有办法我仍然可以为我自己的类实现这个接口? 我知道如何在C#中使用reflection调用私有/内部方法,所以我想在这种情况下也应该使用reflection。 但是,我不知道怎么做。 是的,我知道使用内部/私人内容通常是不明智的,但在这种情况下我看不到其他解决方案。 更新:我无法以任何方式编辑/更改外部组件。 它应该保持不变。

如何通过reflection检查属性是否为虚拟?

给定一个对象,我该如何判断该对象是否具有虚拟属性? var entity = repository.GetByID(entityId); 我试过看: PropertyInfo[] properties = entity.GetType().GetProperties(); 但无法辨别出任何属性是否表示虚拟。

reflection:使用动态方法设置大量对象的属性

所以我有数以千计的通用类型T的对象,我想将它们转换为我得到的对象数组。 所以我必须得到属性列表T,并为每个属性设置数组到相应对象的值 for (int i = 0; reader.Read(); i++) { T tmp = (T)Activator.CreateInstance(typeof(T)); foreach (var prop in properties) { prop.SetValue(tmp, reader.GetValue(reader.GetOrdinal(prop.Name)), null); } } reader是一个DataReader。 我遇到的问题是prop.SetValue很慢(占总执行时间的50%), 我被告知使用动态方法或表达树,我尝试使用表达式树,但从我的理解,我必须为我想要设置的每个值生成一个树,这不会那么好。 所以动态方法是另一种选择。 理想情况下,我需要创建一个方法SetProp(object,propertyName,value) ,我可以一遍又一遍地重用它。

使用对象的所有属性构造动态LINQ查询

嗨,我想构建一个动态的Entity Framework Linq查询与对象的所有属性。 例 我想: – 1)对象测试有5个公共属性。 2)我想遍历此对象并检查每个字符串属性是null还是空。 3)如果没有,我想编写一个查询,该查询将附加where条件以使用该属性值搜索实体。 public void CheckMyEntity(IQueryable _allABCs, MyEntity _MyEntityProperty) { foreach (var prop in _MyEntityProperty.GetType().GetProperties()) { if (!String.IsNullOrEmpty(prop.GetValue(_MyEntityProperty,null).ToString())) { _allABCs = _allABCs.Where(temp => (temp.ABCMyEntitys.All(MyEntity => MyEntity.MyEntity.<> == prop.GetValue(_MyEntityProperty,null)); } } } 任何帮助都会非常有用! 谢谢!

使用C#从强类型类动态构建对象?

目前,我正在手动将属性和值添加到对象,如此示例 ,并发送到Dapper.SimpleCRUD以从Dapper Orm获取数据。 这是我想要达到的理想输出 。 object whereCriteria = null; whereCriteria = new { CountryId = 2, CountryName = “Anywhere on Earth”, CountryCode = “AOE”, IsActive = true }; 以下类应以上述格式构建对象并返回现成的对象。 public static class WhereClauseBuilder { public static object BuildWhereClause(object model) { object whereObject = null; var properties = GetProperties(model); foreach (var property in properties) { var […]

通过reflection / typename实例化generics类

例如,我有一个类,看起来像: public class Repository { public IEnumerable FindAll() { // } } 我希望能够做的是通过reflection创建一个Repository实例。 例如: var typeName = “Customer” var type = Assembly.GetCallingAssembly().GetType(typeName); //obviously, this isn’t valid… var repository = new Repoistory(); 沿着这些方向的事情可能吗?

如何读取bindingSource 托管的对象类型

编辑:我更改了措辞,添加了长示例代码以更具描述性 我需要通过BindingSource读取对象绑定的类型名称。 我的方法接受BindingSource作为参数 ,它不知道BindingSource对象类型’托管’。 但我需要阅读该对象类型 为了更好地解释我的意思,假设我有2个class级 class Person { public string Name { get; set; } public List Parents { get; set; } } class Parent { public string Name { get; set; } public int ChildrenCount { get; set; } } 比我在Windows窗体绑定方案中使用它们: // Create Person List List Persons = new List(); // add Sample […]