- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个接受任何对象的函数,然后它从作为输入的属性或字段中获取值。
目前看起来是这样的:
private string GetFieldValue(object o, Field f)
{
//field.name is name of property or field
MemberInfo[] mi = o.GetType().GetMember(field.name, MemberTypes.Field | MemberTypes.Property,
BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.ExactBinding );
if (mi.Length == 0) throw new ArgumentException("Field", "Can't find member: " + f.name);
Object value;
if (mi[0].MemberType == MemberTypes.Property)
value = ((PropertyInfo)mi[0]).GetValue(o, null);
else value = ((FieldInfo)mi[0]).GetValue(o);
今天我阅读了有关 System.ComponentModel 及其 XXXDescriptor 类的内容。当性能有问题时,2 个框架(Reflection 和 ComponentModel)之间有什么区别。使用 ComponentModel 重写上面的代码会获得更好的性能或灵 active 吗?据我所知,这两者之间的唯一其他区别是 CM 对虚拟属性的支持。
是的。
最佳答案
不同之处在于 ComponentModel 是对原始类的抽象。这意味着您可以定义不存在的属性 - 事实上,这正是 DataView
/DataRowView
将列作为数据属性公开的方式捆绑。使用 ComponentModel,即使在 1.1 中,您也可以获得类似“动态”的东西。
您可能认为这意味着 ComponentModel 速度较慢;但实际上,您可以利用这种抽象来获取 yield ... HyperDescriptor正是这样做的——使用 Reflection.Emit
编写直接 IL 来表示属性,提供比反射或 vanilla ComponentModel 更快的访问。
但是请注意,默认情况下,ComponentModel 仅限于属性(而非字段)。您可以通过即时 PropertyDescriptor
外观来实现,但这不是一个好主意。在 ComponentModel 中也没有太多地方可以放置“只写”属性。
关于c# - 关于 ComponentModel 和反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/824676/
有人可以指向我介绍该新 namespace 的网络广播或教程/视频,以及如何使用它来帮助验证诸如用户输入之类的数据吗? 最佳答案 试试这个(对不起,不是视觉上的): ASP.NET MVC Tip #
是否可以序列化(二进制)System.ComponentModel.Container? 最佳答案 不,它没有标记为可序列化。 关于c# - 序列化 ComponentModel.Container?
我正在 ASP.NET 中创建自定义 UserControl,我正在使用 System.ComponentModel.Attributes 用不同的东西装饰属性。默认情况下,ASP.NET 显示所有公
我有一个接受任何对象的函数,然后它从作为输入的属性或字段中获取值。 目前看起来是这样的: private string GetFieldValue(object o, Field f) { //fi
我在理解容器/组件模型如何在 C# 中相互交互时遇到一些困难。我知道组件如何包含一个站点对象,该对象包含有关容器和组件的信息。但是,假设我有以下代码: using System; using Syst
我正在使用程序集绑定(bind),但仍然收到此错误: 无法加载文件或程序集“System.ComponentModel.Annotations,Version=4.2.1.0,Culture=neut
我遇到了一个难以诊断的奇怪问题。将包含命名空间 Matrix.System 的程序集引用添加到 Windows 服务项目后,我现在在编译服务时遇到此错误: The type or namespace
我有一个 .Net Core 3.0 windows 桌面简单项目,它引用了以下 NuGet 包: Microsoft.NETCore.Platforms(3.0.0-preview.3.19128.
我的设计时组件中有许多类别默认展开。 我想让它们默认显示为折叠状态,或者至少在用户看到它们之前有问题地折叠它们。 [Category("Misc")] public int Id { // .
有人能解释一下我们何时以及为什么应该使用 System.ComponentModel.Container 吗?最近我遇到了这个类的使用 here ,但真的不明白有什么好处可以让我们上这门课。 最佳答案
我正在尝试清除我的 C# 项目中的一些警告,其中有几个警告说: Warning 1 The field 'Namespace.Class.components' is assigned but its
我在枚举中使用 Description 属性为枚举字段提供用户友好的名称。例如 public enum InstallationType { [Description("Forward of
我正在尝试在我的 WPF 项目中使用 DataAnnotations 来指定字符串的最大长度,如下所示: using System.ComponentModel.DataAnnotations; 但是
我正在使用 MVC 4、.net 4 和 Entity Framework 6。我的项目正在我的开发机器上构建,该机器安装了 Visual Studio 2010,但在我的构建服务器上我遇到了命名空间
我正在尝试使用 System.ComponentModel.DesignerCategory 防止扩展标签页组件在设计器中自动打开的属性。关于其他 StackOverflow 问题的建议 1 , 2
我刚刚开始使用Caliburn.Micro,它说要导入 System.ComponentModel.Composition.Initialization 在 System.ComponentModel
我正在使用带有 POCO 的 Entity Framework 4 制作 MVC 3 应用程序。我想尽可能多地注释我的所有实体。我遇到了一个问题,但是我找不到关于每个属性含义的好的文档。有些非常直接,
我有一个 View 模型,其中属性具有显示名称。我现在正在制作一个 Excel 工作表,其中包含与网页中的网格相同的数据。我正在使用 closed xml (使用 openxml)在服务器上创建 Ex
我正在尝试将我在 archlinux 上的 monodevelop 中制作的应用程序捆绑在一起。 在 monodevelop 中构建应用程序后,我将使用以下命令打包: mkbundle --deps
我正在尝试在我的系统中实现多语言支持,工作中的其他系统为此使用从他们已经使用了一段时间的数据库生成的 xmlfiles,所以他们希望我也使用它。 我已经设法翻译了我的表单模型中除显示名称之外的所有内容
我是一名优秀的程序员,十分优秀!