Tag: reflection

如何确定一个types是否实现了一个特定的通用接口types

假定以下types定义: public interface IFoo<T> : IBar<T> {} public class Foo<T> : IFoo<T> {} 如何才能findtypesFoo是否实现通用接口IBar<T>只有损坏types可用?

通过描述属性查找枚举值

这可能看起来有点颠倒,但我想要做的是通过其Description属性从枚举中获取枚举值。 所以,如果我有一个枚举声明如下: enum Testing { [Description("David Gouge")] Dave = 1, [Description("Peter Gouge")] Pete = 2, [Description("Marie Gouge")] Ree = 3 } 我希望能够通过提供string“Peter Gouge”来获得2。 作为一个起点,我可以遍历枚举字段并获取正确的属性字段: string descriptionToMatch = "Peter Gouge"; FieldInfo[] fields = typeof(Testing).GetFields(); foreach (FieldInfo field in fields) { if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0) { if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch) { } } } 但是,然后我被困在内心如果做什么。 […]

我可以用reflection设置属性值吗?

我知道我的C#类中的一个属性的名称。 是否有可能使用reflection设置此属性的值? 例如,说我知道一个属性的名称是string propertyName = "first_name"; 。 那里有一个名为first_name的属性。 我可以使用这个string来设置吗?

C中的reflection支持

我知道这不被支持,但我想知道是否有任何技巧。 任何提示?

获取抽象类的所有inheritance类

我有一个抽象类: abstract class AbstractDataExport { public string name; public abstract bool ExportData(); } 我有派生自AbstractDataExport的类: class XmlExport : AbstractDataExport { new public string name = "XmlExporter"; public override bool ExportData() { … } } class CsvExport : AbstractDataExport { new public string name = "CsvExporter"; public override bool ExportData() { … } } 有没有可能做这样的事情? (伪代码:) foreach […]

如何将Java对象(bean)转换为键值对(反之亦然)?

说我有一个非常简单的java对象,只有一些getXXX和setXXX属性。 该对象仅用于处理值,基本上是一个logging或一个types安全(和高性能)的地图。 我经常需要将该对象转换为键值对(string或types安全),或者将键值对转换为此对象。 除了reflection或手动编写代码来完成这个转换,最好的方法是什么? 一个示例可能是通过jms发送此对象,而不使用ObjectMessagetypes(或将传入消息转换为正确types的对象)。

如何使用reflection来获取参数名称

我想在Ruby中做一些相当重要的反思。 我想创build一个函数,它返callback用堆栈中各种调用函数参数的名称(只要一个更高就足够了,但为什么要停下来?)。 我可以使用Kernel.caller ,去文件和parsing参数列表,但这将是丑陋的,不可靠的。 我想要的function将以下列方式工作: module A def method1( tuti, fruity) foo end def method2(bim, bam, boom) foo end def foo print caller_args[1].join(",") #the "1" mean one step up the call stack end end A.method1 #prints "tuti,fruity" A.method2 #prints "bim, bam, boom" 我不介意使用ParseTree或类似的工具来完成这个任务,但是看Parsetree,不知道如何使用它来达到这个目的。 像这样创build一个C扩展是另一种可能,但是如果有人已经为我做了这个,那将会很好。 我可以看到,我可能需要某种C扩展。 我想这意味着我的问题是C扩展的组合最容易工作。 我不认为调用者+ ParseTree会是足够的。 至于为什么我想这样做,而不是说“自动debugging”,也许我应该说,我想用这个function来自动检查函数的调用和返回条件: def add x, y check_positive return […]

testing对象是C#中的genericstypes

我想执行一个testing,如果一个对象是一个genericstypes。 我已经尝试了以下没有成功: public bool Test() { List<int> list = new List<int>(); return list.GetType() == typeof(List<>); } 我在做什么错了,我该如何执行这个testing?

我如何获得名称空间内的所有类?

我如何获得C#中的命名空间中的所有类?

如何在调用Assembly.GetTypes()时防止ReflectionTypeLoadException

我试图扫描程序集的types实现一个特定的接口使用类似于这样的代码: public List<Type> FindTypesImplementing<T>(string assemblyPath) { var matchingTypes = new List<Type>(); var asm = Assembly.LoadFrom(assemblyPath); foreach (var t in asm.GetTypes()) { if (typeof(T).IsAssignableFrom(t)) matchingTypes.Add(t); } return matchingTypes; } 我的问题是,在某些情况下调用asm.GetTypes()时,我得到ReflectionTypeLoadException ,例如,如果程序asm.GetTypes()包含引用当前不可用的程序集的types。 就我而言,我对引起问题的types不感兴趣。 我正在search的types不需要不可用的程序集。 问题是:有可能以某种方式跳过/忽略导致exception的types,但仍处理程序集中包含的其他types?