草庐IT

reflectable

全部标签

c# - 确定反射(reflect)的属性是否可以分配为 null

我希望自动发现有关所提供类的一些信息,以执行类似于表单输入的操作。具体来说,我使用反射为每个属性返回一个PropertyInfo值。我可以从我的“表单”读取或写入每个属性的值,但如果该属性定义为“int”,我将无法,我的程序甚至不应该尝试写入空值。如何在不编写switch语句来检查每种可能类型的情况下,使用反射来确定是否可以为给定属性分配空值?特别是我想检测盒装类型(如“int”与“int?”)之间的区别,因为在第二种情况下我确实希望能够写入空值。IsValueType和IsByRef似乎没有区别。publicclassMyClass{//ShouldtellmeIcannotassi

c# - 使用 System.Reflection 获取方法的全名

我有一个如下所示的类:publicclassMyClass{...protectedvoidMyMethod(){...stringmyName=System.Reflection.MethodBase.GetCurrentMethod.Name;...}...}myName的值为“MyMethod”。有没有一种方法可以使用反射为myName获取“MyClass.MyMethod”的值? 最佳答案 您可以查看从GetCurrentMethod获得的MethodBase的ReflectedType,即,MethodBasemethod

c# - 在 C# 中,Expression API 是否比 Reflection 更好

现在,我正在研究C#ExpressionAPI。所以我可以使用一些帮助来理解它是如何工作的,包括表达式和反射之间的区别。我还想了解表达式是否只是句法糖分,还是它们确实比反射更好性能方面?我们将不胜感激很好的例子以及指向好的文章的链接。:-) 最佳答案 关于调用一个方法:直接调用在速度方面无可匹敌。使用ExpressionAPI在全局上类似于使用Reflection.Emit或Delegate.CreateDelegate速度方式(可以测量微小差异;一如既往地优化速度没有衡量标准和目标是没有用的)。它们都生成IL,框架会在某个时候将其

c# - .NET - 获取反射(reflect)的 PropertyInfo 的默认值

今天这件事真难倒我。我确信它没有那么难,但我有一个System.Reflection.PropertyInfo对象。我想根据数据库查找的结果设置它的值(想想ORM,将列映射回属性)。我的问题是如果DB返回值是DBNull,我只想将属性值设置为其默认值,与调用相同:value=default(T);//whereTisthetypeoftheproperty.但是,如果你给它一个类型,default()方法将不会编译,这就是我所拥有的:objectmyObj=???;//doesn'treallymatter.somearbitraryclass.PropertyInfomyPropIn

c# - 识别扩展方法的反射(reflection)

在C#中有没有使用反射来判断一个方法是否作为扩展方法被添加到类中的技术?给定如下所示的扩展方法,是否可以确定Reverse()已添加到字符串类中?publicstaticclassStringExtensions{publicstaticstringReverse(thisstringvalue){char[]cArray=value.ToCharArray();Array.Reverse(cArray);returnnewstring(cArray);}}我们正在寻找一种机制来在单元测试中确定扩展方法是否由开发人员适本地添加。尝试这样做的一个原因是,开发人员可能会将类似的方法添加到实

c# - 反射(reflection):如何调用带参数的方法

我试图通过带参数的反射调用一个方法,我得到:objectdoesnotmatchtargettype如果我调用一个没有参数的方法,它工作正常。基于以下代码,如果我调用方法Test("TestNoParameters"),它工作正常。但是,如果我调用Test("Run"),则会出现异常。我的代码有问题吗?我最初的目的是传递一个对象数组,例如publicvoidRun(object[]options)但这没有用,我尝试了一些更简单的方法,例如字符串没有成功。//Assembly1.dllnamespaceTestAssembly{publicclassMain{publicvoidRun(

c# - 用 Reflection 找到私有(private)字段?

给定这个类classFoo{//Wanttofind_barwithreflection[SomeAttribute]privatestring_bar;publicstringBigBar{get{returnthis._bar;}}}我想找到我将用属性标记的私有(private)项目_bar。那可能吗?我在寻找属性但从未寻找私有(private)成员字段的属性中完成了此操作。获取私有(private)字段需要设置哪些绑定(bind)标志? 最佳答案 使用BindingFlags.NonPublic和BindingFlags.In

c# - XmlSerializer - 反射(reflect)类型时出错

使用C#.NET2.0,我有一个复合数据类,它确实具有[Serializable]属性。我正在创建一个XMLSerializer类并将其传递给构造函数:XmlSerializerserializer=newXmlSerializer(typeof(DataClass));我收到一个异常消息:Therewasanerrorreflectingtype.在数据类中还有另一个复合对象。这是否也需要具有[Serializable]属性,或者通过将它放在顶部对象上,是否递归地将它应用于内部的所有对象? 最佳答案 查看您得到的内部异常。它会告诉

go - 如何使用 reflect.Type 对 switch 进行断言

我正在使用structs轻松迭代结构字段的库,例如:packagemainimport"github.com/fatih/structs"typeTstruct{}funcmain(){s:=structs.New(T{})for_,field:=ranges.Fields(){switchfield.Kind(){casebool://dosomethingcasestring://dosomething}}}目前上面的代码不起作用,因为field.Kind是一个reflect.Type。有没有可能让它以某种方式工作?谢谢。 最佳答案

reflection - Golang 反射.值行为

我目前对golang反射包的行为感到绝望,对我来说这似乎根本不一致。1)据我了解,reflect.Value似乎带有指向基础值的指针。例如。如果我打电话varsstringv1:=reflect.ValueOf(&s).Elem()v2:=v1v2.SetString("HelloWorld!")fmt.Println(s)它打印出“HelloWorld!”。但是,这似乎不适用于通过调用Field()获得的reflect.Value。val:=...//Assignareflect.Valuetoitnextval:=val.Field(0)//MakesurethatFieldexi