Tag: reflection

使用Reflection通过签名调用对象实例上的generics方法:SomeObject.SomeGenericInstanceMethod (T参数)

如何调用SomeObject.SomeGenericInstanceMethod(T arg) ? 有一些关于调用generics方法的post,但不完全像这个。 问题是method参数被约束为generics参数。 我知道如果签名是相反的 SomeObject.SomeGenericInstanceMethod(string arg) 然后我可以得到MethodInfo typeof (SomeObject).GetMethod(“SomeGenericInstanceMethod”, new Type[]{typeof (string)}).MakeGenericMethod(typeof(GenericParameter)) 那么,当常规参数是generics类型时,如何获取MethodInfo? 谢谢! 此外,generics参数可能有也可能没有类型约束。

如何使用reflection从事件中获取基础代理的列表?

首先, GetInvocationList()不起作用,因为我希望能够从类外部获取它们。 我认为它可以用一些reflection魔法,这就是我想要弄清楚的。 这就是我现在所拥有的: fooEventDispatcher.GetType().GetField(“FooEvent”, BindingFlags.Instance | BindingFlags.NonPublic); var field = fieldInfo.GetValue(fooEventDispatcher); 我只是不知道该怎么做field 。 有任何想法吗?

如何使用Dictionary 类型获取TKey和TValue的类型

我希望得到TKey和TValue的类型给出Dictionary类型。 例如。 如果type是Dictionary我想知道如何获取keyType = typeof(Int32)和valueType = typeof(String)

测试对象是否是C#中的字典

有没有办法测试对象是否是字典? 在一个方法中,我试图从列表框中的选定项目中获取值。 在某些情况下,列表框可​​能绑定到字典,但在编译时不知道。 我想做类似的事情: if (listBox.ItemsSource is Dictionary) { KeyValuePair pair = (KeyValuePair)listBox.SelectedItem; object value = pair.Value; } 有没有办法在运行时使用reflection动态地执行此操作? 我知道可以使用generics类型的reflection并确定键/值参数,但我不确定在检索这些值之后是否有办法完成其余的操作。

如何在Reflection中迭代List

我有一个名为Students的属性,类型为List 。 在反思中,我可以获得学生财产的价值。 现在问题是如何迭代学生列表。 我需要检查StudentID [某个值]是否在该集合中。 var collection = studentPro.GetValue(studentObj,null); //I need to iterate like this, foreach(var item in collection) { if(item.StudentID == 33) //Do stuff } 请帮我。

如何确定给定.NET程序集使用的子系统?

在C#应用程序中,我想确定另一个.NET应用程序是否是控制台应用程序。 可以使用reflectionAPI完成吗? 编辑:好的,看起来我不会得到这个问题的好答案,因为它看起来不像框架暴露我想要的function。 我在PE / COFF规范中挖掘并想出了这个: /// /// Parses the PE header and determines whether the given assembly is a console application. /// /// The path of the assembly to check. /// True if the given assembly is a console application; false otherwise. /// The magic numbers in this method are extracted from the PE/COFF […]

如何使用Reflections将DataTable转换为List

我有一个类的通用列表,我使用Reflection和扩展方法自动将其转换为DataTable。现在我想反向进行。我想将DataTable转换为List.Better说我想要帮助写一个方法期望一个DataTable和一个Type并根据列名自动查找该类型(类)的属性,并为该Type(类)的对象赋值。就像这个psodu代码: private List ConvertToList(DataTable dt) { List AllColumns = // Get All Column Names of a DataTable for(int i=0;i<dt.Rows.Count;i++) { foreach(var item in AllColumns ) { //Get Property According To **ITEM** //Get Data Of Rows[i][item] and assign it to T.property } } } 我怎么能这样做? 编辑1) 我用@Cuong Le的回答是这样的: var properties = typeof(CustomType).GetProperties().ToList(); List list = ConvertToList(dt, […]

使用reflection比较对象属性

我有两个类Address和Employee如下: public class Address { public string AddressLine1 { get; set; } public string AddressLine2 { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } } public class Employee { public string FirstName { get; set; } public string MiddleName […]

如果我在一个封闭的generics类型上有一个MethodInfo,那么有一种简单的方法来切换这些类型吗?

假设我有类似Nullable.HasValue 。 无论如何将其转换为Nullable.HasValue ? 我知道一个常规的generics方法我可以做methodInfo.GetGenericMethod()但我没有看到一种方法来为该方法的类型做,而不需要做更多的reflection开销。 如果我已经有了这个方法,为什么我要再次反思? 有趣的是,这些方法都具有相同的MetadataToken ,这使得更令人印象深刻的是,不知何故,Module.ResolveMember似乎正在推出正确的方法。 有没有办法用Module.ResolveMethod做到这Module.ResolveMethod ? 本质上,方法和类型都可以具有通用参数,我可能需要切换它们。 由于MethodInfo始终表示其标记相同且标记表示MethodInfo是该方法的最开放版本。 我只需要将它转换为我的类型。 编辑:更多挖掘,看起来像List.Add , List.Add元数据令牌,我从中检索实际上生活在我的模块中,而通用定义存在于不同的模块中。 一旦我检索成员,我真的不想做reflection,因为很难解决被调用的完全相同的方法。 好吧也许我只是愚蠢,但为什么这不起作用:: var methodinfo = typeof(List).GetMethod(“Add”); var handle = methodinfo.MetaDataToken; var methodinfo2 = methodinfo.Module.ResolveMethod(handle,new []{typeof(string)},null); 为什么methodInfo2说它是Add(T)而不是Add(string) ?

在C#中获取generics类型的用户友好名称

有没有编写递归方法的简单方法,它将为Type类中的generics类型提供“用户友好”的名称? 例如,对于以下代码,我想要“List <Dictionary >”,而不是以下代码给出的简写或全名: var list = new List<Dictionary>(); var type = list.GetType(); Console.WriteLine(type.Name); Console.WriteLine(type.FullName);