草庐IT

REFLECTION

全部标签

c# - 遍历索引属性(反射)

我想迭代一个我只能通过反射访问的索引属性,但是(我在充分了解可能有一个令人尴尬的简单答案的情况下说这个,MSDN/Google失败=/)除了在PropertyInfo.GetValue(prop,counter)直到抛出TargetInvocationException。阿拉:foreach(PropertyInfopropinobj.GetType().GetProperties()){if(prop.GetIndexParameters().Length>0){//getanintegercountvalue,byincrementingacounteruntiltheexcept

c# - 具有泛型的对象类型中的 "apostrophe + number"是什么意思(例如 "Collection` 1")?

我有一个对象(MyObject)和一个属性(MyProperty)。我想获取它的类型名称(即String或MyClass等)。我使用:PropertyInfopropInfo=typeof(MyObject).GetProperty("MyProperty");Console.WriteLine(propInfo.PropertyType.Name);Console.WriteLine(propInfo.PropertyType.FullName);简单类型没问题,但当MyProperty是通用类型,我在获取它的名称时遇到问题(例如Collection)。它打印:Collection`

c# - 为什么不能使用反射获取局部变量名?

如果我有这样的代码:publicclassProgram{publicstaticvoidMain(){stringbar="";intfoo=24;}}我可以获得Main中声明的局部变量使用:varflag=BindingFlags.Static|BindingFlags.Public;varfields=typeof(Program).GetMethod("Main",flags).GetMethodBody().LocalVariables;这将返回一个IList和LocalVariableInfo只有三个属性:IsPinned,LocalIndex和LocalType.所以没有

c# - 如何将 C# 对象拆箱为动态类型

我正在尝试做这样的事情:voidsomeMethod(TypeAobject){...}voidsomeMethod(TypeBobject){...}objectgetObject(){if(...)returnnewTypeA();elsereturnnewTypeB();}objectobj=getObject();(obj.GetType())obj;//won'tcompilesomeMethod(obj);显然我在这里很困惑。我知道我可以通过写一个条件语句来完成这项工作——if(obj.GetType()==typeof(TypeA))obj=(TypeA)obj;else

c# - 异常信息 : System. Reflection.TargetInvocationException

我正在开发WPF应用程序,但我仅在运行时在单个设备上收到此错误。ExceptionInfo:System.Reflection.TargetInvocationException我的问题:任何可能导致此错误的线索?知道如何在Release模式下调试应用程序吗?ExceptionInfo:System.Reflection.TargetInvocationExceptionStack:atSystem.RuntimeMethodHandle.InvokeMethod(System.Object,System.Object[],System.Signature,Boolean)atSyst

c# - 如何获取属于自定义属性的属性?

我需要从自定义属性中找到应用了自定义属性的属性的类型。例如:[MyAttribute]stringMyProperty{get;set;}给定MyAttribute的实例,我如何获得MyProperty的类型描述符?换句话说,我正在寻找System.Type.GetCustomAttributes()的对立面 最佳答案 属性本身对用它装饰的对象一无所知。但是您可以在检索属性时注入(inject)此信息。在某些时候,您必须使用类似于以下的代码来检索属性。PropertyInfopropertyInfo=typeof(MyType).G

c# - 如何判断 Type 是否是静态类?

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Determineifatypeisstatic重复Determineifatypeisstatic是否有我可以检查的属性/属性来查看System.Type是否是静态类?我可以通过测试Type有静态方法,并且除了从System.Object继承的实例方法之外没有实例方法,我可以间接地做到这一点,但是它没有感觉干净(我偷偷怀疑我遗漏了什么,这不是静态类的足够严格的定义)。在明确告诉我这是一个静态类的类型上,我是否遗漏了什么?或者staticclass是c#语法糖,没有办法在IL中表达它?谢谢体重

c# - 反射真的很慢吗?

人们普遍认为反射是缓慢的,并尽量避免它。但在目前的情况下,这种信念是真的吗?当前的.net版本发生了很多变化,例如使用ILWeaving(即ILEmit)等,而不是传统的PropertyInfo和MethodInfo执行反射的方式。是否有任何令人信服的证据表明新的反射不再那么慢并且可以使用了。有没有更好的方法来读取属性数据?谢谢,巴斯卡 最佳答案 当您考虑它时,反射的速度之快令人印象深刻。来自ConstructorInfo的缓存委托(delegate)或MethodInfo可以以与任何其他委托(delegate)相当的速度被调用。从

c# - 通过反射在数组中设置值

有没有办法在C#中通过反射在数组属性中设置单个值?我的属性是这样定义的:double[]Thresholds{get;set;}对于“普通”属性,我使用这段代码通过反射来设置它:PropertyInfopi=myObject.GetType().GetProperty(nameOfPropertyToSet);pi.SetValue(myObject,Convert.ChangeType(valueToSet,pi.PropertyType),null);我将如何更改此代码以在任意位置设置数组属性中的值?谢谢!顺便说一句:我尝试使用索引参数,但这似乎只适用于索引属性,不适用于数组属性.

c# - 设置只读字段(这是错误吗?)

在刚刚玩c#的时候,发现了一件奇怪的事情。代码如下:classProgram{staticvoidMain(string[]args){System.Diagnostics.Debug.Write(string.Empty);typeof(string).GetField("Empty",BindingFlags.Static|BindingFlags.Public).SetValue(null,"Tolgahan");Console.WriteLine(string.Empty);//output:Tolgahan}}为什么反射让我们改变只读字段?问题是“为什么允许通过反射设置”,而