reflection 相关问题

反射是程序在运行时观察和/或修改其结构和/或行为的能力。反射高度依赖于实现代码语言 - 请标记使用此标记时使用的代码语言。

创建 Json 对象时反射的性能影响

我有下面的代码来准备 logEventInfo 对象来记录数据。我正在使用 Nlog。我发现使用反射动态添加名称和值很方便。但我知道有一个很大的

回答 1 投票 0

使用字符串接口调用方法

我正在尝试使用配置值运行策略模式。因为直到运行时我才知道该策略,所以我需要通过反射获取它然后调用它,但这是失败的。这是一个简化的...

回答 1 投票 0

映射 Dictionary<string, string> 到某种类型的对象实例,不包括使用 Mapster 的字典中不存在的属性名称

决定使用 Mapster 而不是自己编写转换/映射方法。在他们的 github wiki 上还没有找到任何可以满足我的用例的内容。 我有一个 Dictionary 的实例 决定使用 Mapster 而不是自己编写转换/映射方法。在他们的 github wiki 上还没有找到任何可以满足我的用例的东西。 我有一个 Dictionary 的实例,其中键是目标类型的属性名称,值是目标类型上该属性值的字符串表示形式。 这里有一个目标类型的例子: public sealed class TriggerSettings { public bool ShouldRun { get; set; } public SimpleTriggerRecurringType RecurringType { get; set; } // enum public SimpleTriggerDayOfWeek DayOfWeek { get; set; } // enum public int Hour { get; set; } public int Minute { get; set; } public int Second { get; set; } } 字典中的键可能不正确,键集可能不包含所有目标属性名称。我想根据目标类型的属性获取所有有效的属性名称和映射字符串表示,但条件是我已经拥有目标类型实例并且不想更改字典中不存在的属性。 是否有一种简单的方法可以使用 TypeAdapterConfig 创建一次这样的配置,或者它只能在运行时为特定的字典实例解析? 之前我用我自己的简单方法,使用反射,看起来像这样 public static void ConvertAndMapKeyValuePairsOnObject<T>(T obj, IDictionary<string, string> propertyNameValuePairs) { var properties = typeof(T).GetProperties( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); foreach (var property in properties) { if (!propertyNameValuePairs.ContainsKey(property.Name)) { continue; } var converter = TypeDescriptor.GetConverter(property.PropertyType); var result = converter.ConvertFrom(propertyNameValuePairs[property.Name]); if (result is null) { continue; } property.SetValue(obj, result); } } 找到了一个简单的解决方案。不确定它是否是最好的,但在这种情况下,UseDestinationValue 方法可以用在带有谓词的 TypeAdapterSetter 对象上。将忽略所有无效的属性名称,以及不在字典键集中的目标对象属性。 这里有一个扩展方法,可以在你打算用字典的内容映射到的对象上调用。 public static class MapsterExtensions { public static TDestination UpdateWithDictionary<TDestination>( this TDestination source, IDictionary<string, string> propertyNameValuePairs) { var mappingConfig = new TypeAdapterConfig() .NewConfig<IDictionary<string, string>, TDestination>() .UseDestinationValue(member => !propertyNameValuePairs.ContainsKey(member.Name)); return propertyNameValuePairs.Adapt(source, mappingConfig.Config); } } 用法示例: var propertyDictionary = new Dictionary<string, string> { { "Hour", "12" }, { "Minute", "30" } }; var settings = new TriggerSettings { ShouldRun = true }; Console.WriteLine($"Hour property before mapping: {settings.Hour}"); Console.WriteLine($"Minute property before mapping: {settings.Minute}"); Console.WriteLine($"ShouldRun property before mapping: {settings.ShouldRun}"); settings.UpdateWithDictionary(propertyDictionary); Console.WriteLine($"Hour property after mapping: {settings.Hour}"); Console.WriteLine($"Minute property after mapping: {settings.Minute}"); Console.WriteLine($"ShouldRun property after mapping (should remain the same): {settings.ShouldRun}"); 输出: Hour property before mapping: 0 Minute property before mapping: 0 ShouldRun property before mapping: True Hour property after mapping: 12 Minute property after mapping: 30 ShouldRun property after mapping (should remain the same): True

回答 1 投票 0

声明类型的方法信息相等性

我需要检查两个 MethodInfo 之间的相等性。它们实际上是完全相同的 MethodInfo 除了 ReflectedType(也就是说,DeclaringType 是相同的,方法应该

回答 4 投票 0

通过反射访问嵌套项

给定以下 F# 代码 名称空间 NS 输入 A() = 让 agent = MailboxProcessor.Start(有趣的 mbx -> 让可变字段:int = 0 让 f1() = 5 让 rec 循环 () =...

回答 3 投票 0

如何通过反射调用静态接口方法

如何实现如下功能? 静态对象 GetZero(类型 t) { // 如果 t 实现了 INumberBase,则返回 INumberBase.Zero // 否则,抛出...

回答 1 投票 0

使用反射确定方法是否为“外部”

如何使用反射确定方法是否为外部方法? 样品方法: var mEnter = typeof(System.Threading.Monitor).GetMethod("退出", BindingFlags.Static | BindingFlags.Public);

回答 2 投票 0

使用反射时如何重新选择歧义?

我正在尝试在 Kotlin 中执行以下行: var str: KFunction = String::toUpperCase 但是编译器说: 重载决议歧义。所有这些功能都匹配。 公共场所...

回答 1 投票 0

如何在 Java 中使用反射按名称获取内部类? [重复]

有没有办法将某个名称的内部类作为包含该名称内部类的任何随机类的 java.lang.Class? 使用 getField 不起作用。我正在努力获得...

回答 0 投票 0

如何获取在 Java 中作为 lambda 参数传递的方法名称

例如: @函数接口 公共接口 MyRPC { 对象执行(对象输入); } 公共类 MyImpl{ 公共整数 rpc1(对象输入){ System.out.Println(输入)

回答 1 投票 0

我可以在运行时指定对象类型吗?

如果我有一个通用的应用程序框架,用于各种业务应用程序,这些应用程序在多种场景中使用多个不同的数据源,是否可以在运行时指定所有对象...

回答 1 投票 0

.NET 6 反射与 F# 函数

以下F#测试成功 模块测试1 开放系统.反射 打开 Xunit 打开 System.Threading.Tasks 打开 Microsoft.FSharp.Core 输入 C2() = let f1 (回调: 任务 -> 单元) = () ...

回答 0 投票 0

使用反射使用枚举填充下拉列表

我正在填充一个页面,其中包含使用反射读取类属性的控件。如果属性类型是“字符串”,我将添加一个文本框。如果属性类型是枚举,我正在添加一个下拉列表....

回答 5 投票 0

是否有一种通用的方法来递归检查反序列化对象的空字段?

我收到许多不同的消息,我将它们反序列化为非常不同的对象 这些对象中的大多数都具有不可为空的字段,但在所有消息类型中(来自 GraphQL、Azure 服务...

回答 1 投票 0

JNI:保护字段免受危险的反射访问

我正在设计一个 Java 库,它使用一段通过 JNI 公开的本机代码。该库提供了一个类,该类映射到无法轻松序列化的复杂本机结构。这不是...

回答 1 投票 0

Kotlin 反射检查类属性是否为特定类型的 ArrayList

我对 Kotlin 和 Java 有点陌生,有以下问题:如何检查反映的属性类型是否为特定类型的 ArrayList,例如 ArrayList>?...

回答 0 投票 0

有什么方法可以返回包含 C# 对象属性值的逗号分隔字符串吗?

寻找解决方案以在标头上返回属性名称,然后返回值 公共覆盖字符串 ToString() { StringBuilder 构建器 = new StringBuilder(); var props = this.GetType().

回答 0 投票 0

如何使用扩展委托来引用其他扩展方法

我正在尝试对包含在扩展指示器方法库中的方法进行委托分配。库方法的签名由“Indic”表示

回答 0 投票 0

将字符串转换为构造函数以创建新对象

@NotNull public static String toString(@NotNull Object object, @NotNull Object[] variables, Class... parameters) throws NoSuchMethodException { StringBuilder sb = new StringBuilder(); ...

回答 2 投票 0

调用静态类的方法——类名和方法名都是字符串

我有一个具有这种级联类结构的命名空间 命名空间 MyNameSpace { 公共静态类 Class1 { 公共静态类 Class2 { 公共静态 ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.