Tag: reflection

从表达式树中提取方法名称?

我正在尝试实现以下模式函数: MethodInfo GetMethod( Expression<Func<TTarget, EventHandler>> method) 如果需要,我可以提供TTarget的实例 所需的用法是: public static void Main(string[] args) { var methodInfo = GetMethod(t => t.Method); Console.WriteLine(“Hello, world!”); } private void Method(object sender, EventArgs e) { } 这是我到目前为止所尝试的内容: private static MethodInfo GetMethod(TTarget target, Expression<Func<TTarget, EventHandler>> method) { var lambda = method as LambdaExpression; var body = lambda.Body as UnaryExpression; var call […]

使用包含另一个对象数组的对象的reflection读取属性

如何使用c#中的reflection读取包含数组类型元素的对象的属性。 如果我有一个名为GetMyProperties的方法,并且我确定该对象是自定义类型,那么我该如何读取数组的属性及其中的值。 IsCustomType是确定类型是否为自定义类型的方法。 public void GetMyProperties(object obj) { foreach (PropertyInfo pinfo in obj.GetType().GetProperties()) { if (!Helper.IsCustomType(pinfo.PropertyType)) { string s = pinfo.GetValue(obj, null).ToString(); propArray.Add(s); } else { object o = pinfo.GetValue(obj, null); GetMyProperties(o); } } } 场景是,我有一个ArrayClass和ArrayClass的对象有两个属性: -string Id -DeptArray[] depts DeptArray是另一个具有2个属性的类: -string code -string value 因此,此方法获取ArrayClass的对象。 我想在字典/列表项中读取所有属性从上到下并存储名称/值对。 我能够为价值,定制,枚举类型做到这一点。 我被一堆物体困住了。 不知道怎么做。

隐含版本的IsAssignableFrom?

在我的代码中使用我写的reflection if (f.FieldType.IsAssignableFrom(“”.GetType())) 我有一个隐式转换为字符串的类。 但是上面的if语句并没有抓住它。 我如何使用隐式字符串转换使reflection/上面的if语句捕获字符串和类? 而不是具体的字符串和我知道的每个类?

在字符串变量中创建名称的对象实例

我不知道我问的问题是否可用,但我只是想知道它是否存在以及它是如何工作的。 所以这是我的问题: 我有自己的2-3个自定义模型类。 例如,客户,员工和产品。 现在我在一个字符串中有类名。 并且基于字符串中的类名,我必须创建它的对象并返回到VIEW。 我怎么能实现这个目标? 我知道IF ELSE声明的一个选项,但我想尝试更好的“ 动态 ”方式……

反映控制器列表

我对c#中的反思有点新意。 我正在尝试生成所有控制器的列表,以便测试它们是否使用特定的actionfilter进行修饰。 编写unit testing时,如何访问测试的组件? 这似乎不起作用: var myAssembly = System.Reflection.Assembly.GetExecutingAssembly();

用reflection检测原生物体

我正在使用基于reflection的对象转换器。 它基本上循环遍历对象的属性,并将值分配给已翻译对象上具有相同名称/类型的属性。 ObjectA.Name =“Joe” 翻译为: ObjectB.Name =“Joe” 我需要设置一个特殊情况,因为当属性是自定义类时,例如: ObjectA.Address 我希望我能用PropertyType的IsClass标志检测这些属性 propInfo.PropertyType.IsClass 但是对于字符串属性,此标志似乎也返回true。 还有另一种方法可以validation该属性是非本机类型吗?

根据值确定常量的名称

有没有办法从给定值确定常量的名称? 例如,给出以下内容: public const uint ERR_OK = 0x00000000; 如何获得“ERR_OK”? 我一直在寻找反思,但似乎无法找到任何有助于我的东西。

动态加载assembly并手动强制路径以获取引用的assembly

我正在使用reflection在C#中加载程序集: Assembly = Assembly.Load([assembly_bytestream]); 正在加载的程序集引用另外两个程序集。 根据我的理解,reflection将加载主程序集,然后在GAC中搜索引用的程序集,如果在那里找不到它,则可以将assemblyResolve事件包含在内: AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { if (args.Name.IndexOf([refAsm]) > -1) { Assembly shdocvw = Assembly.LoadFrom([dllPath]); } } 问题是,我不想首先查看GAC我想强制reflection从我定义的特定路径加载引用程序集。 关于如何做到这一点的任何想法?

C#带递归的reflection

我正在研究Reflection,但是我在执行递归时遇到困难。 代码: public class User { public string Name; public int Number; public Address Address; } public class Address { public string Street; public string State; public string Country; } 现在我打印的是价值观。 Type t = user.GetType(); PropertyInfo[] props = t.GetProperties(); foreach (PropertyInfo prp in props) { if(!prp.GetType().IsPrimitive && prp.GetType().IsClass) { // Get the values of the […]

有没有办法在运行时查看Entity Framework Code First的列映射?

我正在尝试编写Entity Framework Code First的附加组件,我需要一种方法来在运行时获取模型列的配置。 例如,这是OnModelCreating在DbModelBuilder上的代码设置: builder.Entity() .Property(n => n.ReportsToID).HasColumnName(“ReportsTo”); 完成此操作后,EntityFramework知道我的属性名称与表中的列名称不同,但是如何在运行时找到字符串”ReportsTo”与ReportsToID相关ReportsToID ? 理想情况下,我正在尝试编写如下方法: public string GetMappedColumnName(DbContext context, Func selector); 将使用如下: string mappedColumnName = GetMappedColumnName(context, x => x.ReportsToID); 我只是不知道在DbContext中找到映射列名的位置。 他们甚至可以访问吗?