问题标签 [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 投票
3 回答
180 浏览

c# - c#根据输入指定方法调用?

如何最好地允许输入 ac# 程序来控制方法调用?例如:

假设我们有一个委托类型:

还有几种方法:

并允许输入选择调用顺序:

以及调用它的代码:

我发布这个问题的原因是因为实现看似简单的想法似乎相当复杂。我知道实现此行为的另一种方法是使用反射 API,但这会更加复杂。

0 投票
2 回答
495 浏览

asp.net - 获取程序集中每个 WebForm 上的控件列表

是否可以使用反射获取 Web 表单上存在的控件的纯文本列表?基本上,一位同事正在寻找一个控件列表来帮助定义验证策略,例如,一般产品编号必须是数字,但在某些屏幕上它们可以是字母数字。我认为使用反射来生成类似以下内容的列表会很简单:

我可以获得表单名称,但到目前为止还没有包含其中的控件。当前代码如下所示:


Assembly.CreateInstance有几个重载。例如,如果我将页面分配行更改为

Page page = (Page)assembly.CreateInstance(types[i].FullName, true, BindingFlags.NonPublic, null, null, null, null);

然后我得到一个关于缺少构造函数的错误。

那么我是否完全走错了路,或者我正在尝试做的事情实际上是否可行?任何帮助深表感谢。

编辑:对这个问题的延迟回复表示歉意。我们进一步使用了 Assembly.GetCallingAssembly() 来生成一个列表,但它仍然不能完全满足我们的需求。最后,我们使用了更冗长的 Find in Entire 解决方案方法。

0 投票
3 回答
598 浏览

c# - 为什么 CLR 允许改变装箱的不可变值类型?

我有一种情况,我有一个简单的、不可变的值类型:

当我装箱此值类型的实例时,我通常希望我装箱的任何内容在我进行拆箱时都会出现相同的结果。令我大吃一惊的是,事实并非如此。使用反射,有人可以通过重新初始化其中包含的数据轻松修改我的盒子的内存:

样本输出:

盒子里有什么:013b50a4-451e-4ae8-b0ba-73bdcb0dd612 :: ConsoleApplication1.ImmutableStruct 盒子里有什么:176380e4-d8d8-4b8e-a85e-c29d7f09acd0 :: ConsoleApplication1.ImmutableStruct

(实际上 MSDN 中有一个小提示表明这是预期的行为)

为什么 CLR 允许以这种微妙的方式改变装箱(不可变)值类型?我知道 readonly 并不能保证,而且我知道使用“传统”反射可以轻松地改变值实例。当对盒子的引用被复制并且突变出现在意想不到的地方时,这种行为就会成为一个问题。

我所知道的一件事是,这完全可以在值类型上使用反射 - 因为 System.Reflection APIobject仅适用于。但是反射在使用值类型时会分开Nullable<>(如果它们没有值,它们会被装箱为空)。这里有什么故事?

0 投票
1 回答
47 浏览

c#-4.0 - 如何删除两个动态对象之间的多对多关系?

我想删除两个动态实体之间的多对多关系。

我见过使用虚拟对象的示例,但它们不是动态的。直到运行时,我才会知道对象或对象集合导航属性的名称。所以我不能说,

我需要动态地做。就像是,

我不一定需要扩展方法,只需要完成工作的东西。我怎样才能做到这一点?谢谢。

(由于对象是动态的,我不知道提供哪些其他细节可能会有所帮助?)

0 投票
1 回答
379 浏览

data-binding - System.Windows.PropertyPath - 这个类可以帮助我反思深层嵌套的属性(类型)吗?

我最近一直在讨论反射的主题,主要是为了实例化一个新类并在字段上设置属性..通过路径......例如,我可能有一个名为 Games 的类,具有公共属性 -

因此,例如,我必须在属性上设置值(使用反射魔法),路径为:“GamingProperties.HowToPlay”

到目前为止,我一直在使用 Guy Mahieu 的“ PropertyReflector ”类——这正是我所需要的,但在反射/反序列化 100,000 个对象时速度很慢。

稍后我发现使用“表达式树”(以及像“ FastReflection ”这样的项目)可以更快地设置属性值是一个很好的例子。但是我现在被 FastReflection 卡住了,因为我不能在嵌套类型上正确设置值...

无论如何——问题是——是否System.Windows.PropertyPath能以某种方式帮助我解决这一切?它甚至有关系吗?也许我可以根据需要使用它,或者使用.Binding方法(与 密切相关System.Windows.PropertyPath)?

我希望我的问题很清楚,不要太混乱,我将不胜感激任何提示,建议......

0 投票
2 回答
3045 浏览

c# - 如何在 C# 中从 ASP.NET MVC 控制器调用静态方法

如果从 ASP .NET MVC 控制器调用 GetMethod,则找不到公共静态方法。(从控制台应用程序可以正常工作)。

为了解决这个虚拟SaveEntityGenericWrapper方法被使用。

如何SaveEntityGenericWrapper从代码中删除?

如果从 ASP .NET MVC 2 控制器调用,为什么GetMethod("SaveEntityGeneric")返回null但有效?GetMethod("SaveEntityGenericWrapper")

SaveEntityGeneric如果在 MVC2 中使用部分信任,如何将其设为私有?

0 投票
2 回答
1622 浏览

.net - 在 VB.NET 运行时创建类的实例对象的变量

在运行时创建对象后,我试图在类中创建新变量。问题是我事先不知道变量名称或值,所以我必须在运行时创建新变量。

例如 -

编辑:这是对我的代码的更详细的解释。如果您在 Eval 函数中观察到我试图评估Fval(abc). 现在对象数组abc没有在 Test 类中声明,因为事先不知道它的存在。我想要做的是创建一个abc长度为 2 的对象数组并用一些值填充它,当Fval(abc)被调用时,索引 1 的值应该是Eval函数的返回值。

0 投票
3 回答
317 浏览

.net - 如何找到声明方法的接口

我正在使用 Unity 进行拦截。因为我有很多接口,我不得不使用VirtualMethodInterceptor. 在我的行为中,我只想在调用的方法在特定类型的接口(具有特殊属性)中声明时做出反应。我认为 MethodBase.DeclaringType 可以解决我的问题,但它的行为与我希望的不同。它返回实现类型。

我同意这是有道理的,因为可以在多个接口中声明该方法,但应该有一种方法可以轻松获取它们的列表。不幸的是我还没有找到它。

显示我的问题的小样本

一个尴尬的解决方案

0 投票
4 回答
7231 浏览

c# - 如何在字节数组中序列化/反序列化程序集对象

假设通过编译代码字符串在内存中创建(可执行)程序集。然后我想把这个程序集对象序列化成字节数组,然后存入数据库。然后稍后我想从数据库中检索字节数组并将字节数组反序列化回程序集对象,然后调用程序集的入口点。

起初,我只是尝试像在 .net 中的任何其他简单对象一样进行此序列化,但显然这不适用于程序集对象。程序集对象包含一个名为 GetObjectData 的方法,该方法获取重新实例化程序集所需的序列化数据。因此,对于如何将所有这些拼凑到我的场景中,我有些困惑。

答案只需要展示如何获取一个程序集对象,将其转换为字节数组,将其转换回程序集,然后在反序列化的程序集中执行入口方法。

0 投票
2 回答
1883 浏览

c# - 创建表单实例时出现反射错误

我一直在试验一个应用程序,它将扫描程序集,检查任何形式的类,然后查看它们有哪些成员。

我用来查询程序集的代码是:

我正在使用它来查询标准表格:

我的问题是,当代码尝试时,Activator.CreateInstance(formType)我得到一个异常说明:"No parameterless constructor defined for this object." 我还可以从检查 formType 中看到 'DeclaringMethod: 'formType.DeclaringMethod' 抛出了一个类型为 'System.InvalidOperationException' 的异常

我不理解错误消息,因为表单具有标准构造函数,我是否遗漏了一些非常明显的东西?

编辑:type.Name揭示代码试图实例化的类型Form1