草庐IT

REFLECTION

全部标签

c# - 保留动态调用方法的异常

RelatedRelated我想动态调用一个MethodInfo对象并让从其内部抛出的任何异常向外传递,就好像它被正常调用一样。看来我有两个选择。它们概述如下。选项1维护MyStaticFunction抛出的异常类型,但是StackTrace因为throw被毁了.选项2维护StackTrace的异常,但异常的类型始终是TargetInvocationException.我可以拉出InnerException及其类型,但这意味着我不能这样写,例如:try{DoDynamicCall();}catch(MySpecialExceptione){/*specialhandling*/}选项1

c# - 反射 - 带参数调用构造函数

例如,我从加载的程序集中读取类型:varsomeType=loadedAssemblies.Where(a=>a!=null&&a.FullName.StartsWith("MY.")).SelectMany(a=>a.GetTypes()).Distinct().ToArray()[0];如果counstructor有参数,我可以读取它们:ParameterInfo[]parameters=classType.GetConstructors()[0].GetParameters();我想使用默认参数值调用构造函数,或者如果参数是枚举,则使用第一个枚举值。如果只有一个参数,并且是枚举,

c# - 我如何使用 Reflection + C# 获取所有引用

使用System.Reflection,我可以获得特定类的所有方法我需要知道对这些方法的引用是什么。例如:在VisualStudio中,如果你想要特定对象的引用右键单击对象并选择“查找所有引用”VisualStudio显示该选定对象的引用我想做同样的事情,但是通过反射代码或其他方式。我可以这样做吗? 最佳答案 这不能用反射来完成。反射是一种用于检查元数据和程序集的工具。为了找到对给定方法/类型的所有引用,您需要检查程序集的底层IL。反射仅具有非常有限的IL功能(仅将其作为字节数组返回)。您需要自定义检查该字节流,以便收集有关它所引用

c# - WP7.1 上的匿名类型和获取访问器?

我正在尝试编写一个简单的对象到字典转换器,如下所示:publicstaticclassSimplePropertyDictionaryExtensionMethods{publicstaticIDictionaryToSimplePropertyDictionary(thisobjectinput){if(input==null)returnnewDictionary();varpropertyInfos=frompropertyininput.GetType().GetProperties(BindingFlags.Instance|BindingFlags.Public|Bindi

c# - 使用反射来确定哪些字段是属性的支持字段

我正在使用反射来映射对象。这些对象在托管代码中,但除了通过反射之外,我看不到它们的源代码、底层结构等。所有这一切的首要目标是一个对象的基本内存映射(在功能上类似于SOS.dllDumpObject和!ObjSize命令)。因此,我试图确定哪些成员被“重复计算”为字段和属性。例如:publicclassCalendarEntry{//privatepropertyprivateDateTimedate{get;set;}//publicfieldpublicstringday="DAY";}当映射显示时:字段天k__BackingField属性日期像这样的类在哪里:publicclass

c# - 为什么我需要一个已加载程序集的 AssemblyResolve 处理程序?

我有两个程序集:App和AddOn。App引用AddOn,但CopyLocal设置为false,因为AddOn将由App动态加载。这是AddOn中的代码:namespaceAddOn{publicclassAddOnClass{publicstaticvoidDoAddOnStuff(){Console.WriteLine("AddOnisdoingstuff.");}}}这是App中的代码:classProgram{staticvoidMain(string[]args){Assembly.LoadFrom(@"..\..\..\AddOn\bin\Debug\AddOn.dll")

c# - 使用 Control+Plus 的快捷方式创建 MenuItem – 使用反射修改 MenuItem 的私有(private)字段是最好的方法吗?

我正在使用旧版MainMenucontrol(withMenuItems)controlinanapplication,andwouldliketoimplementzoominandzoomoutmenuitems(withControl++和Control+-键盘快捷键)。(请注意,我使用的是MainMenu而不是MenuStrip)。MenuItem确实有一个Shortcut属性,类型Shortcut,但它没有CtrlPlus选项。我决定看看如何Shortcutwasimplementedinthereferencesource,看起来每个枚举值只是几个Keys的组合枚举值(例如

c# - C#中通过反射创建匿名对象

有没有办法在.NET3.5运行时通过反射创建C#3.0匿名对象?我想在我的序列化方案中支持它们,因此我需要一种以编程方式操作它们的方法。稍后进行编辑以阐明用例一个额外的限制是我将在Silverlight应用程序中运行所有这些,因此额外的运行时不是一个选项,并且不确定动态生成代码将如何工作。 最佳答案 这是另一种方式,似乎更直接。objectanon=Activator.CreateInstance(existingObject.GetType()); 关于c#-C#中通过反射创建匿名对象

c# - 为什么这个对象的类型通过反射显示没有接口(interface),尽管至少实现了两个?

首先,一个按预期工作的示例:(所有代码都在VS2008即时窗口中执行)25isIComparable>>true25.GetType().GetInterfaces()>>{System.Type[5]}>>[0]:{Name="IComparable"FullName=...>>[1]:{Name="IFormattable"FullName=...>>...到目前为止一切顺利。现在让我们尝试一个通过基类型继承接口(interface)的对象:classTestBase:IComparable{publicintCompareTo(objectobj){thrownewNotImpl

c# - 使用反射在 C# 中设置索引属性的值

我有一个类有一个ObservableCollection作为属性,我正在尝试更改该类实例的该属性内的值。这是我的代码,它会引发TargetException:object[]index=null;varoriginalPropertyName=propertyName;if(propertyName.Contains("[")&&propertyName.Contains("]")){index=newobject[1];index[0]=Convert.ToInt32(propertyName.Split('[')[1].Split(']')[0]);propertyName=pro