Tag: reflection

如何在C#属性(注释)中放置Func?

我有一个C#注释,它是: [AttributeUsage(AttributeTargets.Method)] public class OperationInfo : System.Attribute { public enum VisibilityType { GLOBAL, LOCAL, PRIVATE } public VisibilityType Visibility { get; set; } public string Title { get; set; } public Func<List, List> Func; public OperationInfo(VisibilityType visibility, string title, Func<List, List> function) { Visibility = visibility; Title = title; Func = function; } } 如您所见,有一个属性是Func,我想动态调用它。 […]

System.Reflection GetProperties方法不返回值

有人可以向我解释为什么如果类的设置如下, GetProperties方法不会返回公共值。 public class DocumentA { public string AgencyNumber = string.Empty; public bool Description; public bool Establishment; } 我正在尝试设置一个简单的unit testing方法来玩 该方法如下,它具有所有适当的使用语句和引用。 我正在做的就是调用以下内容,但它返回0 PropertyInfo[] pi = target.GetProperties(BindingFlags.Public | BindingFlags.Instance); 但是,如果我使用私有成员和公共属性设置类,它可以正常工作。 我没有按照旧学校方式设置课程的原因是因为它有61个属性并且这样做会增加我的代码行数至少三倍。 我会成为维护的噩梦。

在C#中,如何判断属性是否为静态? (.Net CF 2.0)

FieldInfo有一个IsStatic成员,但PropertyInfo没有。 我想我只是忽略了我需要的东西。 Type type = someObject.GetType(); foreach (PropertyInfo pi in type.GetProperties()) { // umm… Not sure how to tell if this property is static }

如何确定C#中是否存在隐式转换?

我有两种类型,T和U,我想知道是否从T到U定义了隐式强制转换运算符。 我知道IsAssignableFrom的存在,这不是我正在寻找的,因为它不处理隐式转换。 一些谷歌搜索引导我到这个解决方案 ,但在作者自己的话中,这是丑陋的代码(它试图隐式转换,如果有exception则返回false,否则为true) 似乎测试是否存在具有正确签名的op_Implicit方法将不适用于基本类型 。 是否有更简洁的方法来确定隐式转换运算符的存在?

我如何获得MemberInfo的值?

如何获取MemberInfo对象的值? .Name返回变量的名称,但我需要该值。 我认为你可以用FieldInfo做到这一点,但我没有一个片段,如果你知道如何做到这一点你能提供一个片段吗? 谢谢!

reflection:从PropertyInfo获取FieldInfo

我正在使用Reflection进行一些动态代码生成,并且我遇到了一种情况,我需要获取属性的支持字段(如果它有一个)以便使用它的FieldInfo对象。 现在,我知道你可以使用 .IsDefined(typeof(CompilerGeneratedAttribute), false); 在FieldInfo上发现它是否是自动生成的,所以我假设属性类似于自动生成字段? 干杯,艾德

如何使用Roslyn执行reflection操作

我想使用Roslyn对以下类执行reflection样式操作: public abstract class MyBaseClass { public bool Method1() { return true; } public bool Method2() { return true; } public void Method3() { } } 基本上我想这样做,但与罗斯林: BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; MethodInfo[] mBaseClassMethods = typeof(MyBaseClass).GetMethods(flags); foreach (MethodInfo mi in mBaseClassMethods) { if (mi.GetParameters().Length == 0 && mi.ReturnType == typeof(void)) { methodInfos.Add(mi); } if […]

从加载的程序集中查找实现接口的对象 – 如何比较类型?

我有一个类将加载目录中的所有程序集,然后获取所有类型,看看它们是否实现了一个接口。 我无法进行类型比较。 在调试器中,如果总是未通过比较,我会看到我的类型已加载(我感兴趣的那个)。 如果我在本地使用相同的比较代码,我没有问题,我得到了预期的结果。 我可以在类型接口上进行sting比较,但我更愿意知道我做错了什么。 测试: // Fails [Fact] public void FindISerialPortTest() { var path = Directory.GetCurrentDirectory(); var results = FindImplementers.GetInterfaceImplementor(path); results.Length.Should().Be(1); results[0].Should().BeAssignableTo(); } //Passes [Fact] public void DoesTypeImplementInterfaceTest() { var myType = typeof(SerialPortWrapper); var myInterface = typeof(ISerialPort); FindImplementers.DoesTypeImplementInterface(myType, myInterface).Should().Be(true); } class级: public class FindImplementers { public static T[] GetInterfaceImplementor(string directory) { if (String.IsNullOrEmpty(directory)) { […]

从Object创建Dynamic Func

我有一个标准对象,其中我将每个属性转换为func,如果它的值不为null。 public class TestClassCriteria { public bool? ColumnA { get; set; } public bool? ColumnB { get; set; } } 这是我到目前为止所做的,但我很确定我没有正确定义lambda。 这就是我想要实现的目标。 funcs.Add(x => x.ColumnA == criteria.ColumnA) 。 var properties = criteria.GetType().GetProperties(); var funcs = new List<Func>(); foreach (var property in properties) { var propertyName = property.Name; funcs.Add(x => x.GetType().GetProperty(propertyName).Name == criteria.GetType().GetProperty(propertyName).Name); } 它没有崩溃或导致任何错误,它只是不起作用。 您将提供的任何帮助将不胜感激。

如何反映T为查询构建表达式树?

我正在尝试构建一个通用类来处理来自EF的实体。 这个类与存储库进行对话,但是这个类创建了发送到存储库的表达式。 无论如何,我只是想实现一个虚拟方法,它将作为常见查询的基础。 具体来说,它将接受一个int ,它只需要对相关实体的主键执行查询。 我一直在搞砸它,我已经建立了一个反映,可能会或可能不会。 我这样说是因为我得到一个带有LINQ to Entities消息的NotSupportedException , 无法识别方法’System.Object GetValue(System.Object,System.Object [])’方法,并且此方法无法转换为商店表达式。 那么我尝试了另一种方法,它产生了相同的exception,但LINQ表达式错误的节点类型’ArrayIndex’在LINQ to Entities中不受支持。 我知道这是因为EF不会像L2S那样解析表达式。 无论如何,我正在跳跃一个有更多经验的人可以指出我正确的方向。 我正在用我所做的两次尝试发布整个class级。 public class Provider where T : class { protected readonly Repository Repository = null; private readonly string TEntityName = typeof(T).Name; [Inject] public Provider( Repository Repository) { this.Repository = Repository; } public virtual void Add( T TEntity) […]