Tag: reflection

将盒装对象转换回原始类型

我希望有两个答案中的一个,要么不可能,要么非常简单,我忽略了明显的Google查询。 潜在的问题是我有一个通用对象通过EventHandler传入,它装入对象并模糊真实类型; 只有在运行时我才知道对象是什么。 不可否认, dynamic关键字可以解决这个问题,但我想不要失去智能感知,如果我可以避免它。 另外,它没有解决不知道通用对象的每个属性没有大量reflection的情况。 编辑:我们的想法是能够确定方法参数中对象的真实类型,然后在不事先知道的情况下将该对象转换为真实类型。 这只是一个简化的例子。 盒装可能是错误的术语。 一个例子: public class Program { static void Main(string[] args) { var container = new Container( new Containee { Property1 = Guid.NewGuid(), Property2 = “I’m a property!”, Property3 = DateTime.Now } ); var boxed = (object)container; var originalType = boxed.GetType(); // DOES NOT COMPILE: would like an […]

如何获取基类的所有inheritance类?

class Foo { } class Foo1 : Foo { } class Foo2 : Foo { } 我怎样才能获得所有使用Foo作为基类的类? 在同一程序集中不需要inheritance的类。

Type.GetFields() – 仅返回“public const”字段

我想调用Type.GetFields()并只返回声明为“public const”的字段。 到目前为止我有这个… type.GetFields(BindingFlags.Static | BindingFlags.Public) ……但这也包括“公共静态”字段。

如何在引用的程序集中获取所有类型?

无论出于何种原因,我似乎无法获得引用程序集中的类型列表。 不仅如此,我甚至无法进入这个引用的程序集。 我尝试了AppDomain.CurrentDomain.GetAssemblies() ,但它只返回已加载到内存中的程序集。 我尝试了Assembly.GetExecutingAssembly().GetReferencedAssemblies() ,但这只是返回mscorlib。 我错过了什么?

在setter中获取属性名称

我想在ASP.Net应用程序中的回发之间保留一个属性。 目前这样做: public int MyIndex { get { return (int)Session[ToString() + “MyIndex”]; } } 但更喜欢这样的东西: public int MyIndex { get { return (int)Session[ToString() + #code_that_returns_property_name#]; } } Setter省略了,但它只是使用相同的字符串将值推送到Session中。 有没有办法使用reflection,或者更好的解决方案?

使用C#和reflection打印完整对象图

我有一个compex对象 class A { int Field1; int field2; property ClassB ClassB; property classC classC; etc etc…. } 我想用reflection打印完整的对象图。 有什么好的代码吗?

将匿名类型作为方法参数传递

在我的插件架构中,我目前正在将插件名称(字符串),方法名称(字符串)和参数(对象数组)传递给我的插件服务,以执行指定的方法并返回结果(类型为T)。 插件服务的execute方法如下所示: public TResult Execute(string pluginName, string operation, params object[] input) { MethodInfo method = null; TResult result = default(TResult); var plugin = _plugins.Enabled().FirstOrDefault(x => x.GetType().Name.Equals(pluginName, StringComparison.InvariantCultureIgnoreCase)); if (plugin != null) { method = plugin.GetType().GetMethods().FirstOrDefault(x => x.Name == operation); if (method != null) { result = (TResult)method.Invoke(plugin, input); } } return result; } 示例用法: var […]

ComponentModelreflection(例如PropertyDescriptor)和标准reflection(例如PropertyInfo)之间的区别?

你能用它们做什么之间有明显的重叠。 ComponentModelreflection的东西在System.Reflection之上只是一个更友好的层吗?

避免在Type.GetType()中给出命名空间名称

Type.GetType(“TheClass”); 如果namespace不存在,则返回null ,如: Type.GetType(“SomeNamespace.TheClass”); // returns a Type object 有没有办法避免给出namespace名称?

有没有办法获得类型Func ?

精简版 : 我们可以使用以下方法获取func Func : typeof(Func) 但是如果我想获得Func的类型,我应该使用什么,或者它可以做什么呢? 显然,这不编译: typeof(Func) 长版: 考虑以下场景,我有两个类似的方法,我想使用Reflection得到第二个( Func ): public void Foo(Func func) { } public void Foo(Func func) { } 我正在尝试这个: var methodFoo = typeof (Program) .GetMethods() .FirstOrDefault(m => m.Name == “Foo” && m.GetParameters()[0] .ParameterType .GetGenericTypeDefinition() == typeof (Func)); 但由于Func和Func的generics类型定义相等,它给出了第一种方法。 要解决这个问题,我可以执行以下操作: var methodFoo = typeof (Program) .GetMethods() .FirstOrDefault(m => m.Name […]