Tag: reflection

如何在C#中获取类型的原始名称?

我正在使用reflection来打印方法签名,例如 foreach (var pi in mi.GetParameters()) { Console.WriteLine(pi.Name + “: ” + pi.ParameterType.ToString()); } 这很好用,但它打印出基元类型为“System.String”而不是“string”和“System.Nullable`1 [System.Int32]”而不是“int?”。 有没有办法在代码中查找参数的名称,例如 public Example(string p1, int? p2) 版画 p1: string p2: int? 代替 p1: System.String p2: System.Nullable`1[System.Int32]

反映基类的私有字段

这是结构: MyClass:SuperClass2 SuperClass2:SuperClass1 superClass2位于Product.Web中,SuperClass1位于.NET System.Web程序集中 我试图强制一个值进入SuperClass1上的私有bool字段。 但无论我尝试什么,我都无法让领域从反思中回归。 我使用以下代码与不同的BindingFlag组合,但到目前为止没有任何工作。 SuperClass1是一个抽象类。 ((SuperClass1)this).GetType().GetFields(System.Reflection.BindingFlags.NonPublic); 注意:当我使用GetProperties()时,我得到了一个很好的大列表,但是当我指定任何bindingflags时,即使有匹配的属性,我也什么也得不到。 这是怎么回事? 此外,该字段未标记为内部 显然我会使用GetField(字符串名称,BindingFlags),但我甚至无法使GetFlags()工作。 更新 :我已经尝试按照建议添加BindingFlags.Instance,但它不起作用(无论如何都是预期的)。 我找回了来自SuperClass1类inheritance自的2个字段。 与GetField一起使用时返回null(字符串名称,标志) 这是我试图获取该字段的基类的代码 public abstract class BaseValidator : Label, IValidator { private bool propertiesChecked; … }

如何使用reflection获得generics类型的正确文本定义?

我正在研究代码生成,并遇到了generics问题。 这是导致我出现问题的“简化”版本。 Dictionary dictionary = new Dictionary(); string text = dictionary.GetType().FullName; 使用上面的代码片段, text的值如下: System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] (添加了换行符以提高可读性。) 有没有办法在不解析上面的字符串的情况下以不同的格式获取类型名称( type )? 我希望text结果如下: System.Collections.Generic.Dictionary

动态的使用被认为是一种不好的做法吗?

在C#中,有人可以这样做: MyClass myInstance = new MyClass(); dynamic mydynamicInstance = myInstance; 然后,调用一个方法,如: //This method takes a MyClass argument and does something. Caller.InvokeMethod(myDynamicInstance); 现在,这将导致在运行时确定myInstance类型,如果它有效,将正常调用Caller.InvokeMethod 。 现在,我的问题是,如果这被认为是使用dynamic的不良做法,尤其是在以下情况中: 1) InvokeMethod使用内部reflection实例化myDynamicInstance类型的另一个实例。 2)有一个抽象基类MyBaseClass及其子类,包括MyBaseClass 。 如果我们为所有这些派生类都有许多重载的InvokeMethod方法,我们是否可以使用它来在运行时允许类型确定,然后通过方法重载进行适当的调用(或者对方法调用的后期绑定)类)?: public abstract class MyBaseClass {/*…*/} public class MyClass : MyBaseClass {/*…*/} public class MyAnotherClass : MyBaseClass {/*…*/} MyBaseClass myBaseClassRef = new MyClass(); dynamic myDynamicInstance = myBaseClassRef; […]

通过将函数名称作为字符串传递来动态调用任何函数

如何自动创建实例并动态执行其function? 谢谢 编辑:还需要一个传递参数的选项。 谢谢

使用reflection更改只读属性

可能吗? 用reflection或任何其他方式?

为什么IDE会将TargetInvocationException视为未捕获?

我有一些代码使用reflection来从对象中提取属性值。 在某些情况下,属性可能会抛出exception,因为它们具有空引用等。 object result; try { result = propertyInfo.GetValue(target, null); } catch (TargetInvocationException ex) { result = ex.InnerException.Message; } catch (Exception ex) { result = ex.Message; } 最终代码正常工作,但是当我在调试器下运行时: 当属性抛出exception时,IDE将进入调试器,就好像exception未被捕获一样。 如果我刚刚运行,程序就会流出,exception作为TargetInvocationException出现,并在InnerException属性中有真正的exception。 我怎么能阻止这种情况发生?

如何从C#中的字符串创建generics类?

我有一个像这样的Generic类: public class Repository {…} 我需要用字符串来实例…示例: string _sample = “TypeRepository”; var _rep = new Repository(); 我怎样才能做到这一点? 这有可能吗? 谢谢!

通用DbDataReader到List 映射

我的属性绑定数据访问类有一个小问题(更像是烦恼)。 问题是当读取器中没有列中的相应属性时映射失败。 码 这是mapper类: // Map our datareader object to a strongly typed list private static IList Map(DbDataReader dr) where T : new() { try { // initialize our returnable list List list = new List(); // fire up the lamda mapping var converter = new Converter(); while (dr.Read()) { // read in each row, […]

查看是否在使用reflection的方法内调用方法

我正在使用reflection,目前有一个MethodBody 。 如何检查MethodBody中是否调用了特定方法? Assembly assembly = Assembly.Load(“Module1”); Type type = assembly.GetType(“Module1.ModuleInit”); MethodInfo mi = type.GetMethod(“Initialize”); MethodBody mb = mi.GetMethodBody();