问题标签 [propertyinfo]

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 投票
2 回答
1832 浏览

c# - .NET PropertyInfos 的平等

我有一些将 2 个 PropertyInfos 与 Equals() 进行比较的代码。虽然这通常似乎可行,但我遇到了一种奇怪的情况,即同一基础属性的两个反射属性信息对象不相等:

看起来 PropertyInfo 实际上并没有实现 Equals(),但我认为 .NET 缓存了反射成员,以便始终返回相同的实例。你肯定会一直看到 a.GetType() == b.GetType() 。这不是 PropertyInfos 的情况吗?

其他一些注意事项: - 在 .NET 4、VS2012、x86 构建目标中运行 NUnit 测试时发生了这种奇怪现象 - 我们以这种方式比较的所有属性甚至都不会发生这种情况,但它在一个属性上始终失败。

谁能解释这种行为?

编辑:如果有人感兴趣,这里是我写的比较 MemberInfos 的 EqualityComparison 函数:

0 投票
1 回答
2807 浏览

c# - PropertyInfo.GetValue(object obj, object[] index) 抛出“目标”异常

我需要一个具有扩展搜索机制的通用列表,所以我创建了一个List<T>带有附加索引器的通用列表(base)。因此,如果 T 是一个对象,则列表允许基于字段获取项目。这是示例代码

还有我的通用清单

但我无法获得该属性的值,它会抛出“目标异常”。

请帮我解决这个问题。

0 投票
4 回答
9176 浏览

c# - 如何获取具有指定名称的 DataMemberAttribute 的属性?

如何反思性地获取具有给定名称的 DataMember 的属性(假设每个 DataMember 都有一个唯一的名称)?例如,在以下代码中,名称为“p1”的 DataMember 的属性为PropertyOne

目前,我有:

这行得通,但感觉可以改进。我特别不喜欢GetCustomAttributes()被调用两次。

如何更好地重写它?理想情况下,如果我能把它做成一个简单的单线就太好了。

0 投票
1 回答
1143 浏览

android - 从 Android App 调用 Web 服务返回 null 对象

我正在编写一个使用 KSOAP 与 Web 服务通信的 Android 应用程序。Web 服务和 Android 应用程序之间的连接正在工作,因为我可以调用 Web 服务并获取返回值 (hello)。但是,如果我尝试通过 .addProperty 将应用程序中的名称赋予 Web 服务,则 Web 服务将返回一个空对象。

这是我的代码:

主要活动:

网络服务器:

我希望你能帮帮我!

0 投票
0 回答
1318 浏览

c# - PropertyInfo GetCustomAttributes 返回 0 个对象

所以这是我第一次在这里问,请多多包涵。我正在尝试学习如何将属性附加到我的对象,但我无法检索它们。所以这是我的属性类:

我如何将它“附加”到我的一个对象上的属性的示例:

以及我当前如何检索属性的代码:

我也试过这种格式

它们都返回 0 个对象。所以我不确定发生了什么?

提前致谢。

0 投票
2 回答
2534 浏览

c# - 类型来自 PropertyInfo.PropertyType 的泛型类实例

我有如下课程:

我想以这种方式使用它们:

我遇到的问题如下:我只能使用反射从 PropertyInfo 实例中获取“MyClass”类型,所以我有

我怎样才能做到这一点?有任何想法吗?

UPD。 我正在尝试将 Type 传递给泛型方法。是的,这就是我想要的。

0 投票
1 回答
493 浏览

android - KSOAP 和 Web 服务器通信 (PropertyInfo)

所以我正在开发一个应该连接到网络服务的 Android 应用程序。此连接工作正常。我已经使用返回“Hello Christian”的简单方法对其进行了测试。这在应用程序中显示正确。如果我尝试使用参数(名称)执行此操作,它会返回“Hello null”。

从技术上讲,我正在使用 Android 4.2.2 和 KSOAP 2.6.5。Web 服务在 Oracle WebLogic v12 上运行。按照我的源代码:

我尝试以两种方式添加 propertyInfo。首先使用简单的 request.addProperty 和创建 PropertyInfo 并在之后添加它的漫长过程。两种方式都行不通。但是,当我使用某些教程中的服务器(例如摄氏度到华氏度)尝试它时,它可以工作并返回正确的答案。

这里是来自网络服务器的“代码”:

遵循 WSDL 文件以防它有助于解决我的问题:

所以我希望你们中的一个可以帮助我,因为我完全不知道该怎么做。亲切的问候,克里斯蒂安

0 投票
4 回答
19030 浏览

c# - 动态创建新的 PropertyInfo 对象

这是我的第一篇文章,虽然我在某种程度上搜索了与我的问题相关的主题,但我很难找到正确的答案。

我的问题可能很简单,但我知道答案可能并不那么容易给出。如果有的话。

话虽如此,这就是我的情况:例如,我有一个 PropertyInfo 对象数组,我用它来从类中获取属性,如下所示:

看起来很容易,对吧?现在我的问题是:如何创建一个新的 PropertyInfo 对象并将其添加到数组中?

我看过其他帖子,用户想要设置 PropertyInfo 的值,但这不是我需要的。我需要动态创建一个新的 PropertyInfo 对象,其中我拥有的唯一可用数据是NameType

我之前发布的测试用例只是我想要实现的一个小例子。事实上,我真正的最终目标是能够基于这个类创建一个新的 PropertyInfo:

我希望有人可以帮助我实现这一目标。提前谢谢了!

编辑:我忘了在 GetProperties() 方法之前添加 o.GetType() 。谢谢伊利亚伊万诺夫!

我这样调用方法 SelectProperties:

该方法如下所示:

此致,

路易斯


更新

好的,所以我遵循 280Z28 的建议,并在一个新类中继承 PropertyInfo。我做了更多研究,在 MSDN 中发现我需要重写以下方法:GetValue、SetValue、GetAccessors、GetGetMethod、GetSetMethod 和 GetIndexParameters。

但是,当我尝试使用参数调用 base 时,它​​给了我一个错误提示,我引用了“无法调用抽象成员:'System.Reflection.PropertyInfo.GetAccessesors(bool)'”。如果我尝试在没有任何参数的情况下调用该方法,它不会显示任何错误,但我觉得这是错误的方法。

这是我到目前为止所得到的:

更新 2

好吧,那效果不好。经过几个小时尝试执行 PropertyInfo 或 PropertyDescriptor 的派生类后,我决定不采用这种方法。

相反,我从阅读其他帖子中获得了另一个想法。我真正的问题在于,我通常阅读和用于获取属性的类并不总是相同的。所以我意识到我可能真正需要的只是一种动态创建动态类的方法,然后才能获取属性。

我读到有一种叫做 ExpandoObject 和 ElasticObject 的东西,虽然我还不知道如何将它们应用到我的问题中以便最终得到解决方案。

好的,现在我真正要做的是 -> 我一直在使用以下链接中提到的解决方案:jQuery DataTables Plugin Meets C#。

问题是,这假设每个数据库表都有不同的静态模型/类。但是,在我的情况下,我将有两种类型的列:由每个 DB 表类提供的列(也称为基本列),然后是我在改编中已经动态提供的其他列。

例如:如果这是 DB 表类:

然后我提供了一个额外的列,名为“Action”,类型为 string,然后在 DataTableParser 类中,在 _properties 属性中应该有以下信息:

老实说,这就是所需要的!不多不少,不多不少!其余的我已经在解析了!

最后,因为我的列数(提供的)与传递给 DataTableParser 类的对象不同,所以在对 DataTable 进行排序和过滤时总是会出错。

请问有什么帮助吗?我真的很需要!再次感谢。

此致,

路易斯

0 投票
2 回答
4860 浏览

c# - C#反射,如何在类中获取属性实例以设置值

我想在类的方法中将类的属性重置为默认值。我的类被实例化一次(实际上是一个 MVVM 框架中的 ViewModel),我不想破坏和重新创建整个 ViewModel,只是清除许多属性。下面的代码是我所拥有的。我唯一缺少的是如何获取 SetValue 方法的第一个参数 - 我知道它是我正在设置的属性的一个实例,但我似乎无法弄清楚如何访问它。我收到错误:“对象与目标类型不匹配”。

0 投票
1 回答
213 浏览

.net - 为什么基类的成员与派生类中的相同成员不同?

这是这个问题的后续:Lambda 表达式没有返回预期的 MemberInfo

s也是MethodInfo如此。

Human我可以理解什么时候是接口,或者什么时候nameHuman抽象/虚拟的,必须有所不同。但是为什么密封类型会如此呢?不正是nameof吗?MannameHuman

澄清:正如乔恩所说,他们ReflectedType的 s 是不同的。ReflectedType在决定接口成员或被覆盖成员的相等性时,在相等性应该派上用场,因为它们是不同的。但我认为不应该考虑决定上述简单案例的平等性。可能是设计团队想要保持一致。只是想知道是什么原理促使框架设计人员ReflectedType在决定跨多个类的同一成员的相等性时考虑属性。