草庐IT

Reflection

全部标签

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

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

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

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

reflection - Golang 对象的静态与动态绑定(bind)

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我有这个应用程序,其中根据结构中的字符串过滤请求并执行不同的功能。我的方法是使用一个Map将字符串映射到函数指针并执行它们。然而,这种方法正在被一个想通过反射进行过滤的队友所争辩。我们正在使用Go,它用于监控我们网站的事件。队友做法:使用反射根据字符串切换对象,将字符串传给函数让函数调用相关函数。我的方法:从字符串到函数的简单映射感谢任何帮助。

reflection - 反射(reflect) : How to get the name of a struct field?

typeUserstruct{Namestring}functest(ointerface{}){t:=reflect.TypeOf(o)fmt.Println(t)}u:=&User{"Bob"}test(u.Name)//prints"string",butIneed"Name"这在Go中可能吗?我希望拥有尽可能少的“魔术弦”,所以不要UpdateFields("姓名","密码")我更愿意使用UpdateFields(user.Name,user.Password) 最佳答案 你不能那样做。我能想到的最接近的东西,但它太丑了所以

reflection - 不能在用反射制作的 slice 上使用范围,然后传递 json.Unmarshal

我从下面的代码中得到以下错误:invalidindirectoftypedSlice(typeinterface{})cannotrangeovertypedSlice(typeinterface{})这让我感到困惑,因为reflect.TypeOf(copy)匹配t的类型。funcUnmarshal(treflect.Type)[]interface{}{ret:=[]interface{}{}s:=`[{"Name":"Thequick..."}]`slice:=reflect.Zero(reflect.SliceOf(t))o:=reflect.New(slice.Type())

reflection - Go Reflect 方法调用无效的内存地址或 nil 指针取消引用

我正在尝试使用反射来调用结构上的方法。但是,即使attachMethodValue和args都不是-零。关于它可能是什么的任何想法?去Playground:http://play.golang.org/p/QSVTSkNKampackagemainimport"fmt"import"reflect"typeUserControllerstruct{UserModel*UserModel}typeUserModelstruct{Model}typeModelstruct{transactionService*TransactionService}func(m*Model)Attach(t

reflection - 使类型指向带有反射的指针

鉴于此:varvreflect.Value=...v.Type()//*model.Company如何实例化一个新的model.Company并通过反射修改它的字段? 最佳答案 类似的东西:v:=reflect.ValueOf(&Company{})t:=v.Type()c:=reflect.New(t.Elem()).Elem()c.FieldByName("Name").SetString("ReflectionInc.")fmt.Printf("%#v\n",c.Interface())//=>main.Company{Nam