Tag: reflection

如何获取基类的公共静态方法?

我的基类有一个公共静态方法,但是当我调用typeof(TDerived).GetMethods(BindingFlags.Public |BindingFlags.Static )时,我的方法不会被返回。 (当然,TDerived从我的基类以某种方式inheritance)。 我没有在此查询的位置引用我的基类。 我究竟做错了什么?

如何确定某个特定代表是否已分配给某个活动?

我在winform上有一个命令按钮。 所以,如果我有类似的东西: myButton.Click += MyHandler1; myButton.Click += MyHandler2; myButton.Click += MyHandler3; 如何判断是否已将任何特定的MyHandler添加到Click事件中,以便它不会再添加到我的代码中的其他位置? 我已经阅读了如何使用GetInvocationList()来获取自己的事件信息。 但是在尝试使用各种组合获取命令按钮的项目时出错。 它说, “事件’System.Windows.Forms.Control.Click’只能出现在+ =或 – =的左侧。” 我错过了什么? [编辑] – 我想强调艾哈迈德指出的这个问题 。 这是一个kludge,应该更容易恕我直言,但看起来它可能只是工作。

确定参数是否在C#中使用reflection使用“params”?

考虑这个方法签名: public static void WriteLine(string input, params object[] myObjects) { // Do stuff. } 如何确定WriteLine方法的“myObjects”参数使用params关键字并且可以采用变量参数?

C#使用reflection获取通用参数名称

说我有一个像这样的C#类: class MyClass{} 如何从给定的Type实例中获取”Tkey”和”Tvalue” ? 我需要参数名称,而不是Type。 编辑我的类是未知的类型,所以它可能是类似的 class MyClass2{} 同样

如何通过reflection访问Generic.List索引?

好吧,我有一个类,我传递一个对象作为属性。 我传递的对象是List 在我的class级我试图通过reflection访问对象索引,但我不能! 例: 这节课的作品我刚刚写下了我想给你看的部分,我需要帮助。 class MyClass { private object _recordSet; public object RecordSet { get { return _recordSet; } set { _recordSet = value; } } public string Draw() { system.reflection.Assembly asem = system.reflection.Assembly.getAssembly(_dataSource.GetType()); object instance; instance = asem.CreateInstance(_dataSource.GetType().UnderlyingSystemType.FullName); //to access de Count of my List int recordcount = int.Parse(_dataSource.GetType().GetProperty(“Count”).GetValue(_dataSource,null)); //i need to do […]

ModelBindervalidation使用reflection在getter上中断

我遇到了一个似乎与reflection和模型绑定器validation有关的问题,特别是FormatterParameterBinding.ExecuteBindingAsync(..) ,虽然我可以使用一个方法来做我想要的但如果我可以使用我会更喜欢它财产。 在这里,我正在寻找对模型绑定器validation过程的一些见解,为什么我无法做我想做的事情以及如何解决问题,或者解决它。 设置 public class ModelBindingValidationBreaker { public ModelBindingValidationBreaker() { Properties = new List(); } public int A { get; set; } public int B { get; set; } public IList Properties { get; set; } /*// Uncomment to break the model binder validation! public IList PropertyInfos { get { return GetType() .GetProperties() .Where(pi […]

使用动态generics类型参数创建generics类的实例

我需要像这样创建一个generics类的实例: Type T = Type.GetType(className).GetMethod(functionName).ReturnType; var comparer = new MyComparer(); // ERROR: “The type or namespace name ‘T’ could not be found” 我发现这个答案只有通过反思才能实现。 但是使用reflection我得到了我需要转换为我的generics类型的对象。 我试过这样的 Type myGeneric = typeof(MyComparer); Type constructedClass = myGeneric.MakeGenericType(); object created = Activator.CreateInstance(constructedClass); var comparer = (T)Convert.ChangeType(created, T);// ERROR: “The type or namespace name ‘T’ could not be found” 但得到同样的错误。 怎么解决? […]

在C#中reflection地实现generics类型推断

我需要为脚本语言实现做一些通用类型推断,我想知道我是否缺少一些简单的方法。 暂时让我问一下类型结构并忽略边界。 为了说明,这是一个深层嵌套的例子: T foo( List<List<List>> ) {…} 现在我想测试是否可以传递类型的参数栏: List<List<List>> 到该方法,然后使用带有已发现的param类型的MakeGenericMethod()来实现并调用它。 据我所知,即使我设法构造一个等同于foo参数的开放generics类型(即List<List<List>> ),它也不会使用isAssignable()进行测试。 我不确定是否有一些技巧来检查开放generics类型的可分配性,或者它是否根本不受支持。 我想如果必须,我可以直接这样做。 在具体化 – 看起来我将不得不递归爬行类型以找到与类型参数的位置匹配的参数类型然后进行替换…我一直希望我可能能够以某种方式更直接地从参数类型构造可调用方法,但我没有看到如何做到这一点。 任何已经经历过这种疯狂的人的建议都会受到赞赏:) 谢谢,Pat Niemeyer

映射两个相同类型的对象(不包括某些字段)的最佳方法是什么?

我之前在这里发布了我的问题,但我没有得到任何回复原因 – 我猜 – 它太通用了。 我会试着更简洁。 我有两个相同类型的对象,我想映射一些属性并排除其他属性。 我想要做的是将对象保存在缓存中并稍后使用具有特定属性的属性(字段)获取它。 我看过Automapper,但是我没有找到任何适合我的东西,所以我想要实现我自己的系统。 我创建了一个属性: [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] public class FilterFieldAttribute: Attribute { } 并在我需要包含的字段上装饰了一个类: public class OrdersViewModel : BaseViewModel { … [FilterField] [DisplayName(“Order Number:”)] public string OrderNumber { get; set; } [FilterField] [DisplayName(“From date:”)] public DateTime FromDate { get; set; } [FilterField] [DisplayName(“To date:”)] public […]

通过c#中的reflection获得’基本’数据类型而不是奇怪的可空类型

我的基本需求是从LINQ to SQL查询生成的匿名类型中获取数据类型。 我有一段代码(比我能写的更聪明,因为我还没有深入研究过reflection)从匿名类型中返回数据类型,并且在linq2sql属性中标记为’not nullable’的元素非常有效。 所以,如果我有一个字符串,它将作为System.String返回。 但是,当元素可以为空时,我最终会得到它的“全名”: {Name =“Nullable 1″ FullName = “System.Nullable 1 [[System.Decimal,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]”} 在这种情况下,我想要提取的是System.Decimal类型(在字符串或其他情况下,我只想要System.String)。 我查看了属性,找不到任何似乎存储它的东西。 private static Dictionary GetFieldsForType(IEnumerable data) { object o = data.First(); var properties = o.GetType().GetProperties(); return properties.ToDictionary(property => property.Name, property => property.PropertyType); } LINQ查询(我认为这不重要): var theData = from r in db.tblTestEdits select new […]