如果我有这样的代码:publicclassProgram{publicstaticvoidMain(){stringbar="";intfoo=24;}}我可以获得Main中声明的局部变量使用:varflag=BindingFlags.Static|BindingFlags.Public;varfields=typeof(Program).GetMethod("Main",flags).GetMethodBody().LocalVariables;这将返回一个IList和LocalVariableInfo只有三个属性:IsPinned,LocalIndex和LocalType.所以没有
人们普遍认为反射是缓慢的,并尽量避免它。但在目前的情况下,这种信念是真的吗?当前的.net版本发生了很多变化,例如使用ILWeaving(即ILEmit)等,而不是传统的PropertyInfo和MethodInfo执行反射的方式。是否有任何令人信服的证据表明新的反射不再那么慢并且可以使用了。有没有更好的方法来读取属性数据?谢谢,巴斯卡 最佳答案 当您考虑它时,反射的速度之快令人印象深刻。来自ConstructorInfo的缓存委托(delegate)或MethodInfo可以以与任何其他委托(delegate)相当的速度被调用。从
有没有办法在C#中通过反射在数组属性中设置单个值?我的属性是这样定义的:double[]Thresholds{get;set;}对于“普通”属性,我使用这段代码通过反射来设置它:PropertyInfopi=myObject.GetType().GetProperty(nameOfPropertyToSet);pi.SetValue(myObject,Convert.ChangeType(valueToSet,pi.PropertyType),null);我将如何更改此代码以在任意位置设置数组属性中的值?谢谢!顺便说一句:我尝试使用索引参数,但这似乎只适用于索引属性,不适用于数组属性.
我有一个事件处理程序,它需要确定类型并在匹配特定类型时执行代码。最初我们将它转换为一个对象,如果它不为空,我们就执行代码,为了加快速度,我使用了反射,但它实际上减慢了它的速度,我不明白为什么。这是一个代码示例Trace.Write("StartingusingReflection");if(e.Item.GetType()==typeof(GridDataItem)){boolisWatch=Convert.ToBoolean(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IsWatch"]);if(isWatch){
我通常重写ToString()方法以输出属性名称和与它们关联的值。我有点厌倦了手写这些,所以我正在寻找一个动态的解决方案。主要内容:TestingClasstc=newTestingClass(){Prop1="blah1",Prop2="blah2"};Console.WriteLine(tc.ToString());Console.ReadLine();测试类:publicclassTestingClass{publicstringProp1{get;set;}//propertiespublicstringProp2{get;set;}publicvoidMethod1(stri
我需要开发一个包含两个主要部分的应用程序:具有特定业务类(例如书籍、图书馆、作者...)的业务逻辑部分一个通用部分,可以在数据网格中显示书籍、图书馆......,将它们映射到数据库......)。通用部分使用反射从业务类中获取数据,而无需在业务类中编写特定的数据网格或数据库逻辑。这工作正常,允许我们添加新的业务类(例如LibraryMember),而无需调整数据网格和数据库逻辑。然而,多年来,代码被添加到业务类中,这些代码也利用反射来完成业务类中的事情。例如。如果一本书的作者改变了,观察者被调用来告诉作者本身应该将这本书添加到他所写的书籍集合中(Author.Books)。在这些观察者
我有一个带有可选参数的私有(private)静态方法的类。我如何通过反射从另一个类调用它?有一个类似的question,但它不涉及静态方法或可选参数。publicclassFoo{privatestaticvoidBar(stringkey=""){//dostuff}}如何调用Foo.Bar("test")和Foo.Bar()(例如,不传递可选参数)? 最佳答案 C#中的可选参数值是通过在调用点注入(inject)这些值来编译的。IE。即使你的代码是Foo.Bar()编译器实际上生成了这样的调用Foo.Bar("")在查找方法时,
好吧,我们都知道反射的性能比“新建”一个类实例要低很多倍,而且在很多情况下这很好,具体取决于应用程序的要求。问题:我们如何使用后期绑定(bind)(反射)策略创建高性能.NET类。我有一个现有要求,要求使用反射(CreateInstance)创建类实例,但性能至关重要。在我的情况下,我正在为我们应用程序中的每个传入SMS消息创建实例。在生产期间,这很容易每天超过一百万。我想听听并分享一些关于如何在不直接引用代码中的类的情况下创建.NET类的想法,例如使用反射。我也在想是否有办法以某种方式缓存可以缩短“创建”时间的类工厂 最佳答案 一
我想使用反射获取属性类型。这是我的代码varproperties=type.GetProperties();foreach(varpropertyInfoinproperties){model.ModelProperties.Add(newKeyValuePair(propertyInfo.PropertyType.Name,propertyInfo.Name));}这段代码propertyInfo.PropertyType.Name没问题,但是如果我的属性类型是Nullable我得到这个Nullable'1字符串,如果写FullName如果得到这个stirngSystem.Nulla
在.net中,有没有办法使用反射来确定方法上的参数是否用“params”关键字标记? 最佳答案 检查ParamArrayAttribute是否已应用于ParameterInfo对象://usestring.Format(str,args)asatestvarmethod=typeof(string).GetMethod("Format",new[]{typeof(string),typeof(object[])});varparam=method.GetParameters()[1];Console.WriteLine(Attrib