问题标签 [system.reflection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
9478 浏览

c# - 如何获取类型中的方法

给定:System.Type 实例。

目的是在类型中获得新引入的方法(我不知道正确的词),这些方法 - 不继承 - 不被覆盖

我想使用 .NET Reflection 并尝试了该Type.GetMethods()方法。但是,它甚至返回了继承和覆盖的。

得到所有方法后,我想到了过滤。我查看了MethodInfo类公开的属性/方法。我不知道如何得到我想要的。

例如:我有一堂课, class A { void Foo() { } }

当我调用 时typeof(A).GetMethods(),我与: 、和Foo中的方法相处融洽。我想将其过滤为 only 。System.ObjectEqualsToStringGetTypeGetHashCodeFoo

有谁知道如何做到这一点?

谢谢。

0 投票
5 回答
1642 浏览

c# - 如何在 C# 中使用反射调用将字符串数组作为参数的方法

我有一个方法如下图...

由于整个框架的设置方式,我必须使用反射调用此方法。

这是我用来调用它的代码

这返回了 MissingMethodException,说找不到 Fit.TcpConnector.MakeRequest 方法。

但是,如果我将 MakeRequest 的签名更改为

代替

然后,它正在工作。任何人都可以在调用以数组作为参数的函数时指出我正确的方向吗?

0 投票
4 回答
10420 浏览

c# - 如何将 PropertyInfo 转换为属性表达式并使用它来调用泛型方法?

如何转换PropertyInfo为可用于调用StructuralTypeConfiguration<TStructuralType>.Ignore<TProperty>(Expression<Func<TStructuralType, TProperty>> propertyExpression)方法的属性表达式?

我尝试使用Expression.Property()来构造表达式,但是当我将此表达式用作propertyExpression参数时出现以下错误:

The type arguments for method cannot be inferred from the usage. Try specifying the type arguments explicitly.

这个错误可能是指TProperty类型参数,我不知道如何指定只有PropertyInfo.

我这样做是为了:使用实体框架的 StructuralTypeConfiguration.Ignore() 忽略所有属性,但指定 set

更新

不工作的代码:

0 投票
1 回答
184 浏览

garbage-collection - 如何使用字符串作为对象名称调用 GC.GetGeneration()?

我正在使用反射在 c# 中获取我类的所有字段,但现在我想获取我类中每个变量的 GC 生成。我怎样才能做到这一点?

这甚至可能吗?谢谢

0 投票
1 回答
207 浏览

c# - 使用反射将值写入 struct var 成员不起作用,但它适用于类

我一直在 stackoverflow 上阅读如何使用反射写入类 var 成员。我使用类似的东西:

这适用于类,但如果我在读取 myvar 时对 Struct 而不是类做同样的事情,我总是得到 0(int 的默认构造值)。这是我使用的代码:

有谁知道为什么会发生这种情况?

0 投票
4 回答
4635 浏览

c# - 将一个对象属性值转移到另一个对象

毕竟,我知道AutoMapper,我不想使用它。因为我正在学习C#,我想深入了解它。所以我正在尝试自己解决这个问题(如下所述)。

但是,我正在尝试创建一个属性复制器,以将一种类型的属性的值对应到另一种类型的属性,如果该属性具有相同的名称和类型并且可以从源读取并且在目标中可写。我正在使用type.GetProperties()方法。采样方法在这里:

它有效,但我在 SO 上阅读了一个答案,即使用System.Reflection.Emit后期绑定的代表更快并且性能更高ILGenerator。但是没有更多的解释或任何链接。你能帮我理解加速这段代码的方法吗?或者你能给我一些关于、、和迟到的代表的链接吗?或者任何你认为能帮助我服从的东西?EmitILGenerator

完成问:

我从@svick 的回答中了解并学到了很多东西。但是现在,如果我想将它用作一个开放的泛型方法,我该怎么做呢?像这样的东西:

或扩展名:

0 投票
2 回答
160 浏览

c# - C# VS2010 反射中的参数转换

我可以在method.Invoke(objectname,object[]params)期间将字符串作为参数传递给签名Getdetails(int,string,bool)的方法,而不在传递之前将它们转换为相应的类型吗?


反射会处理转换还是应该将其动态转换为与函数签名匹配的适当参数类型?我在同一个应用程序中调用了几个具有不同签名的方法。


所以,这里是场景:

我将带有参数类型和值的 methodId 存储在表中。然后检索它们并使用反射调用。但我得到一个TargetInvocationException无法将 System.String 转换为 System.Int32。

0 投票
2 回答
997 浏览

asp.net - Issue with CompileAssemblyFromSource when called from a WCF app

I have a WCF service that exposes a method. When a client calls this method, the following occurs:

  1. the method does some processing
  2. it tries to load an assembly if its already there
  3. if the above dll isn't there, it generates C# code, compiles it using CSharpCodeProvider's CompileAssemblyFromSource api
  4. It then loads the just generated assembly

Now the problem. The first time the method it called, it generates the assembly at point 3), and when it tries to return the assembly reference via CompilerResults.CompiledAssembly it throws a file not found exception. However, I can clearly see that the assembly has been generated at the specified location and I can open it with other applications.

If I call the method again via a client, it is able to load the assembly (it was successfully generated as a result of the previous call) and goes ahead to do the remaining set of tasks. Only when the assembly isnt there and it generates it and goes ahead to load it immediately, I get that exception. Any ideas? I have tried playing around with the web.config, changing impersonation to true/false. I have a seperate app pool to run this web application and I tried changing the identity of the app pool from local service to local system, even gave my windows logon credentials which has admin rights but no luck.

Any help would be much appreciated.

0 投票
1 回答
976 浏览

c# - 加载程序集并使用不同的名称和扩展名复制它

最近开始使用 Reflection、Reflection.Emit 和 Code Dom。我编码的目的是加载一个程序集(例如“C:\Temp\MyAssembly.exe”),读取它的类和方法。这已经完成,但是我有兴趣将“MyAssembly.exe”的副本保存到“MyAssembly.dll”。原因是我想检测代码并对方法进行一些更改。我知道如何创建新程序集并保存它们,但我不确定是否可以将扩展名为 .exe 的现有程序集(包括其所有类和方法)“克隆”到 .dll。

我将不胜感激任何建议!谢谢。彼得

0 投票
2 回答
48740 浏览

c# - 如何获取当前函数的名称?

可能重复:
您可以使用反射来查找当前执行方法的名称吗?
C#如何从代码中获取当前方法的名称

例如:

打印:foo

有可能在 C# 中做到这一点吗?