Tag: reflection

反思:如何获得通用方法?

可能重复: 如何使用reflection来调用generics方法? 选择具有reflection的右通用方法 嗨,您好 假设我在一个类中有以下两种方法: public void MyMethod(object val) {} public void MyMethod(T val) {} 通过reflection,我可以得到第一个这样的方法: Type[] typeArray = new Type[1]; typeArray.SetValue(typeof(object), 1); var myMethod = myInstance.GetType().GetMethod(“MyMethod”, typeArray); 但是我如何获得第二种通用​​方法呢?

如何使用Reflection获取类及其基类(在层次结构中)的所有属性? (C#)

所以我现在所拥有的是这样的: PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public); 其中obj是某个对象。 问题是我想要的一些属性不在obj.GetType()它们位于其中一个基类中。 如果我停止调试器并查看obj,我必须挖掘一些“基础”条目以查看我想要获得的属性。 是否有一些绑定标志我可以设置它返回那些或我是否必须递归挖掘Type.BaseType层次结构并对所有这些进行GetProperties ?

如何通过Reflection获取字符串属性的值?

public class Foo { public string Bar {get; set;} } 如何通过reflection获得字符串属性Bar的值? 如果PropertyInfo类型是System.String,则以下代码将引发exception Foo f = new Foo(); f.Bar = “Jon Skeet is god.”; foreach(var property in f.GetType().GetProperties()) { object o = property.GetValue(f,null); //throws exception TargetParameterCountException for String type } 看来我的问题是该属性是一个索引器类型,带有System.String。 另外,如何判断该属性是否为索引器?

使用Reflection(DotNET)查找程序集中的所有命名空间

我有一个程序集(作为ReflectionOnly加载),我想找到这个程序集中的所有命名空间,所以我可以将它们转换为自动生成的源代码文件模板的“using”(VB中的“Imports”)语句。 理想情况下,我只想将自己限制在顶级命名空间,而不是: using System; using System.Collections; using System.Collections.Generic; 你只会得到: using System; 我注意到System.Type类上有一个Namespace属性,但有没有更好的方法来收集程序集内的命名空间,而不涉及迭代所有类型并剔除重复的命名空间字符串? 大卫,很有责任

有没有办法用reflection“覆盖”方法?

没有inheritance但只有reflection是否可以在C#中动态更改方法的代码? 就像是 : nameSpaceA.Foo.method1 = aDelegate; 我不能改变/编辑Foo类。 namespace nameSpaceA { class Foo { private void method1() { // … some Code } } } 我的最终目标是改变动态代码: public static IList EnsureNodeSet(IList listItems); 在System.Xml.Xsl.Runtime.XslConvert.cs中 转: if (!item.IsNode) throw new XslTransformException(Res.XPath_NodeSetExpected, string.Empty); 进入: if (!item.IsNode) throw new XslTransformException(Res.XPath_NodeSetExpected, item.value);

如何在C#中从字符串创建实例?

我正在从XML中读取信息,其中包含我需要实例化的对象类型及其构造函数参数。 对象类型实际上在兄弟命名空间内的另一个项目中。 (我需要在Company.Project1类中创建一个Company.Project2.Type。) 我发现了这个问题 ,但它没有处理构造函数参数或它在另一个命名空间中的事实。 我怎样才能做到这一点? 编辑:项目属性中未正确设置程序集名称和默认名称空间。

为什么reflection可以在C#中访问class的protected / private成员?

为什么reflection可以在C#中访问class的protected / private成员? 这对class级来说不安全吗,为什么反思会有这样的权力? 这是反模式吗?

如何找出属性是否是具有reflection的自动实现的属性?

所以在我的情况下,我正在使用reflection来发现类的结构。 我需要能够通过PropertyInfo对象找出属性是否是自动实现的属性。 我假设reflectionAPI没有公开这样的function,因为自动属性是C#依赖的,但有没有解决方法来获取这些信息?

为什么GetType返回System.Int32而不是Nullable ?

为什么这个片段System.Int32的输出而不是Nullable ? int? x = 5; Console.WriteLine(x.GetType());

有没有办法通过reflection获得类型的别名?

我正在编写一个简单的代码生成应用程序来从DB2数据库模式构建POCO。 我知道这没关系,但我更喜欢使用类型别名而不是实际的系统类型名称(如果它们可用),即“int”而不是“Int32”。 有没有办法使用reflection,我可以得到一个类型的别名,而不是它的实际类型? //Get the type name var typeName = column.DataType.Name; //If column.DataType is, say, Int64, I would like the resulting property generated //in the POCO to be… public long LongColumn { get; set; } //rather than what I get now using the System.Reflection.MemberInfo.Name property: public Int64 LongColumn { get; set; } 提前致谢。