C# GetField 方法应用实例

news/2024/5/6 22:03:42

目录

关于 C# Type 类

GetField 方法应用

应用举例

心理CT设计题

类设计

DPCT类实现代码

小结


关于 C# Type 类

Type表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。调用 this.GetType() 方法得到Type对象,可获取成员信息,如方法名、变量名。更多学习请参照以下链接:

Type 类 (System) | Microsoft Learn

本文以数据采集应用实例介绍 Type.GetField 方法的实际应用。

GetField 方法应用

GetField 是获取当前 Type 的特定方法,我们在这里介绍 GetField(String, BindingFlags) 即使用指定的绑定约束搜索指定的字段变量。

其中 string name 表示要搜索的方法名称,System.Reflection.BindingFlags 枚举可见下表:

序号筛选器标志说明
1BindingFlags.Instance 或 BindingFlags.Static 必须指定实例或静态方可有效返回
2BindingFlags.Public搜索当前 Type 中包含的公共方法
3BindingFlags.NonPublic搜索当前 Type 中包含的非公共方法 、私有方法、内部方法和保护方法
4BindingFlags.FlattenHierarchy在层次结构中的包括 public 和 protected 静态成员; private 继承类中的静态成员不包括在层次结构中
5BindingFlags.IgnoreCase忽略方法name的大小写进行搜索
6BindingFlags.DeclaredOnly如果只搜索 Type 声明的方法,则搜索只是继承的方法

应用举例

心理CT设计题

假设我们有一组心理测评题目,共计10题,每题有 A、B、C、D、E、F 共计六个单选项,分六个维度进行计分,各初始维度得分均为0,如果符合条件则+1分,该维度如下表:

序号变量名类型说明
1轻躁狂int其特征包括:气质昂扬,爱说、精力充沛、易怒、思维奔逸、抑郁气短等。 初始值为0
2妄想狂int为了区分那些被判断为具有关系妄想、被害妄想、夸大自我概念、猜疑心、过度地敏感、意见和态度生硬等偏执性人格而制定。初始值为0
3抑郁int抑郁的特征是缺乏干劲,对未来没有希望,一般对自己的生活状况极其不满。 初始值为0
4癔病int癔病的特征是心因性的不随意肌体机能丧失和机能障碍。 初始值为0
5疑病int其特征是对自己的身体健康的一种过度的关心,担心自己有病或不健康。初始值为0
6精神分裂int其特征包括:思维、感情和行为混乱。初始值为0

初始化代码如下:

int 轻躁狂=0;
int 妄想狂=0;
int 抑郁=0;
int 癔病=0;
int 疑病=0;
int 精神分裂=0;

基本的设计如下,通过被测试者对题目的理解,回答其中的选项(单选),则采集后的数据拼接为10个字母组合,如下:

string key1="BACCEDFABCD";

其中 key1 字符串即为被测试者的答案。

建立代码对应维度的字典变量        Dictionary<string, string> descript = new Dictionary<string, string>() ,如下代码:

            descript.Add("A", "轻躁狂");descript.Add("B", "妄想狂");descript.Add("C", "抑郁");descript.Add("D", "癔病");descript.Add("E", "疑病");descript.Add("F", "精神分裂");

建立 Dictionary<string, int> dpct = new Dictionary<string, int>();  字典变量,用于存储模型的运算值(每一题均不同),如下代码:

            dpct.Add("A1", 1);dpct.Add("B1", 1);dpct.Add("C1", 1);dpct.Add("D1", 1);dpct.Add("E1", 1);dpct.Add("F1", 1);dpct.Add("A2", 0);dpct.Add("B2", 0);dpct.Add("C2", 0);dpct.Add("D2", 0);dpct.Add("E2", 0);dpct.Add("F2", 0);dpct.Add("A3", 0);dpct.Add("B3", 1);dpct.Add("C3", 0);dpct.Add("D3", 0);dpct.Add("E3", 0);dpct.Add("F3", 1);dpct.Add("A4", 1);dpct.Add("B4", 0);dpct.Add("C4", 0);dpct.Add("D4", 0);dpct.Add("E4", 1);dpct.Add("F4", 0);dpct.Add("A5", 0);dpct.Add("B5", 1);dpct.Add("C5", 0);dpct.Add("D5", 1);dpct.Add("E5", 1);dpct.Add("F5", 1);dpct.Add("A6", 1);dpct.Add("B6", 1);dpct.Add("C6", 1);dpct.Add("D6", 0);dpct.Add("E6", 1);dpct.Add("F6", 0);dpct.Add("A7", 0);dpct.Add("B7", 0);dpct.Add("C7", 0);dpct.Add("D7", 0);dpct.Add("E7", 1);dpct.Add("F7", 0);dpct.Add("A8", 0);dpct.Add("B8", 1);dpct.Add("C8", 0);dpct.Add("D8", 0);dpct.Add("E8", 0);dpct.Add("F8", 0);dpct.Add("A9", 1);dpct.Add("B9", 1);dpct.Add("C9", 0);dpct.Add("D9", 1);dpct.Add("E9", 1);dpct.Add("F9", 1);dpct.Add("A10", 1);dpct.Add("B10", 1);dpct.Add("C10", 1);dpct.Add("D10", 0);dpct.Add("E10", 1);dpct.Add("F10", 1);

类设计

创建一个 DPCT 类用于计算各维度的得分情况,该类设计如下:

序号成员类型说明
1int 轻躁狂=0;
int 妄想狂=0;
int 抑郁=0;
int 癔病=0;
int 疑病=0;
int 精神分裂=0;
属性6维度初始值,均为0;
2Dictionary<string, string> descript = new Dictionary<string, string>()属性用于选项代码与唯度对应的字典
3Dictionary<string, int> dpct = new Dictionary<string, int>(); 属性存储每题答案对应的计算得分
4string key1="";方法接收用户的答案组合字符串
5public string countScrore()方法计算各维度变量的得分
DPCT类实现代码

完整的DPCT类示例代码如下:

public class DPCT
{int 轻躁狂=0;int 妄想狂=0;int 抑郁=0;int 癔病=0;int 疑病=0;int 精神分裂=0;public string key1 = "";Dictionary<string, string> descript = new Dictionary<string, string>();Dictionary<string, int> dpct = new Dictionary<string, int>();public DPCT(){descript.Add("A", "轻躁狂");descript.Add("B", "妄想狂");descript.Add("C", "抑郁");descript.Add("D", "癔病");descript.Add("E", "疑病");descript.Add("F", "精神分裂");dpct.Add("A1", 1);dpct.Add("B1", 1);dpct.Add("C1", 1);dpct.Add("D1", 1);dpct.Add("E1", 1);dpct.Add("F1", 1);dpct.Add("A2", 0);dpct.Add("B2", 0);dpct.Add("C2", 0);dpct.Add("D2", 0);dpct.Add("E2", 0);dpct.Add("F2", 0);dpct.Add("A3", 0);dpct.Add("B3", 1);dpct.Add("C3", 0);dpct.Add("D3", 0);dpct.Add("E3", 0);dpct.Add("F3", 1);dpct.Add("A4", 1);dpct.Add("B4", 0);dpct.Add("C4", 0);dpct.Add("D4", 0);dpct.Add("E4", 1);dpct.Add("F4", 0);dpct.Add("A5", 0);dpct.Add("B5", 1);dpct.Add("C5", 0);dpct.Add("D5", 1);dpct.Add("E5", 1);dpct.Add("F5", 1);dpct.Add("A6", 1);dpct.Add("B6", 1);dpct.Add("C6", 1);dpct.Add("D6", 0);dpct.Add("E6", 1);dpct.Add("F6", 0);dpct.Add("A7", 0);dpct.Add("B7", 0);dpct.Add("C7", 0);dpct.Add("D7", 0);dpct.Add("E7", 1);dpct.Add("F7", 0);dpct.Add("A8", 0);dpct.Add("B8", 1);dpct.Add("C8", 0);dpct.Add("D8", 0);dpct.Add("E8", 0);dpct.Add("F8", 0);dpct.Add("A9", 1);dpct.Add("B9", 1);dpct.Add("C9", 0);dpct.Add("D9", 1);dpct.Add("E9", 1);dpct.Add("F9", 1);dpct.Add("A10", 1);dpct.Add("B10", 1);dpct.Add("C10", 1);dpct.Add("D10", 0);dpct.Add("E10", 1);dpct.Add("F10", 1);}public string countScrore() {for (int i = 0; i < key1.Length; i++){string anwser = key1.Substring(i, 1);string varname = descript[anwser];FieldInfo fi=this.GetType().GetField(varname, BindingFlags.NonPublic| BindingFlags.Instance);fi.SetValue(this, (int)fi.GetValue(this) + dpct[anwser+(i+1).ToString()]);}}
}

countScore 核心方法取出每一个答案选项字母,根据代码与维度对应关系,取出要计算值的变量名称字符串,然后通过GetField方法查找到变量,并根据模型添加分值。

其基本设计如下图所示:

调用 GetField 方法 得到 FieldInfo 对象,然后 FieldInfo 对象再执行 SetValue 和 GetValue 方法执行增加值操作。

小结

GetField 方法的更多详情介绍,可参考如下链接:

https://learn.microsoft.com/zh-cn/dotnet/api/system.type.getfield?view=net-8.0

类代码在这里仅做为 GetField 方法实例讲解参考,不做为实际的测评数据和测评效果。

感谢您的阅读,希望本文能够对您有所帮助。


http://www.mrgr.cn/p/03153658

相关文章

二叉树的性质

性质一:二叉树的第i层上最多有2^(i-1) 个节点 性质二:深度为k的二叉树最多有2^(k)-1个节点 等比数列求和公式: 直接套进去就得到 2^(k)-1 (结点的度&#xff08;Degree) &#xff1a;结点子树的个数。树的度&#xff1a; 树中结点的最大度数。度为k的树也称为k叉树) 性质三:叶…

Uptime Kuma 使用指南:一款简单易用的站点监控工具

我平时的工作会涉及到监控&#xff0c;而站点是一个很重要的监控项。项目上线后&#xff0c;我们通常会将站点监控配置到云平台上&#xff0c;以检测各站点的连通性。但随着项目不断增多&#xff0c;云平台上的配额就有点捉急了。针对这个情况&#xff0c;我们可以试试这个开源…

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色

CSS画一条虚线,并且灵活设置虚线的宽度和虚线之间的间隔和虚线的颜色。 先看效果图&#xff1a; 在CSS中&#xff0c;你可以使用border属性或者background属性来画一条虚线。以下是两种常见的方法&#xff1a; 方法一&#xff1a;使用border属性 你可以设置一个元素的border…

4.24日团队开发第五天

今天进行了晨会主要讨论了昨天完成情况,以及遇到的问题 同时针对完成度进行了分析,及时调整了进度

Linux 网络操作命令Telnet

Telnet 尽管 Telnet 已经逐渐被更安全的 SSH 协议所取代&#xff0c;但在某些特定场景下&#xff0c;如对旧系统的维护或教育目的&#xff0c;Telnet 仍然有其使用价值。本文将介绍如何在 Linux 系统中安装 Telnet 客户端&#xff0c;以及如何使用它进行远程登录。 用户使用 t…

MySQL 锁机制全面解析

目录 1. MySQL的锁类型1.1 全局锁1.2 表锁1.3 行锁1.4 共享锁&#xff08;读锁&#xff09;1.5 排它锁&#xff08;写锁&#xff09;1.6 死锁 2 乐观锁和悲观锁2.1 乐观锁2.2 悲观锁 3 意向锁4 间隙锁5 临键锁6 插入意向锁7. 事务隔离级别对锁的影响6.1 读未提交&#xff08;Re…

账号安全及应用

一、账号安全控制 1.1系统账号清理 将用户设置为无法登陆 锁定账户 删除账户 设定账户密码&#xff0c;本质锁定 锁定配置文件-chattr&#xff1a; -a 让文件或目录仅供附加用途。只能追加 -i 不得任意更动文件或目录。 1.2密码安全控制 chage 1.3历史命令 history&am…

OceanBase数据库日常运维快速上手

这里为大家汇总了从租户创建、连接数据库&#xff0c;到数据库的备份、归档、资源配置调整等&#xff0c;在OceanBase数据库日常运维中的操作指南。 创建租户 方法一&#xff1a;通过OCP 创建 确认可分配资源 想要了解具体可分配的内存量&#xff0c;可以通过【资源管理】功…

Hive主要介绍

Hive介绍 hive是基于 Hadoop平台操作 HDFS 文件的插件工具 可以将结构化的数据文件映射为一张数据库表 可以将 HQL 语句转换为 MapReduce 程序 1.hive 是由驱动器组成&#xff0c;驱动器主要由4个组件组成&#xff08;解析器、编译器、优化器、执行器&#xff09; 2.hive本身不…

网络协议深度解析:SSL、 TLS、HTTP和 DNS(C/C++代码实现)

在数字化时代&#xff0c;网络协议构成了互联网通信的基石。SSL、TLS、HTTP和DNS是其中最关键的几种&#xff0c;它们确保了我们的数据安全传输、网页的正确显示以及域名的正常解析。 要理解这些协议&#xff0c;首先需要了解网络分层模型。SSL和TLS位于传输层之上&#xff0c…

数据可视化(四):Pandas技术的高级操作案例,豆瓣电影数据也能轻松分析!

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

如何在阿里云快速配置自动定时重启ECS云服务器?

背景 无论是电子商务、在线教育、游戏&#xff0c;还是流媒体等业务&#xff0c;服务器的稳定运行都是至关重要的。然而&#xff0c;在实际运行中&#xff0c;我们可能会遇到这样一些场景&#xff1a; 系统更新&#xff1a;一些操作系统或者软件的更新可能需要重启服务器才能…

buuctf-pwn-2.rip

先用checksec看一下保护情况红色表示没有保护,绿色则表示有相应的保护 关于每种保护会在之后的做题中遇到,也有相应的应对措施,这次就不过多深入 打开ida64分析附件发现高危函数gets,这个函数不会检查输入的长度 我们可以利用它修改函数的返回地址,从而执行后门函数找到后…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

条件生成对抗网络(cGAN)在AI去衣技术中的应用探索

随着深度学习技术的飞速发展&#xff0c;生成对抗网络&#xff08;GAN&#xff09;作为其中的一个重要分支&#xff0c;在图像生成、图像修复等领域展现出了强大的能力。其中&#xff0c;条件生成对抗网络&#xff08;cGAN&#xff09;通过引入条件变量来控制生成模型的输出&am…

Redis系列5:深入分析Cluster 集群模式

1 背景 前面我们学习了Redis高可用的两种架构模式&#xff1a;主从模式、哨兵模式。 解决了我们在Redis实例发生故障时&#xff0c;具备主从自动切换、故障转移的能力&#xff0c;终保证服务的高可用。 但是这些其实远远不够&#xff0c;随着我们业务规模的不断扩展&#xff0…

Anaconda中安装pyecharts

学习Python的过程中发现conda无法使用pyecharts https://pypi.org/project/pyecharts/#files 下载后将whl文件复制到到本地conda\scripts目录下 随后打开conda 切换到script目录下,输入命令 pip install pyecharts-2.0.5-py3-none-any.whl 等待安装完成 在pycharm中配置Python…

【ZYNQ】zynq启动模式及程序固化

一、前言 由于zynq含有arm cpu ,其启动模式由ps主导&#xff0c;与纯逻辑的fpga不相同&#xff0c;此处做一个记录。 二、zynq启动模式 关于zynq的启动模式详细内容可以参考官方文档&#xff1a;ug585-Zynq 7000 SoC Technical Reference Manual&#xff0c;第六章。 2.1 启…

网络拓扑—FTP服务搭建

均使用Windows Server 2003进行搭建目录FTP服务搭建网络拓扑配置网络FTPPC安装FTP服务配置FTP服务FTP用户配置—1PC机访问FTP站点IE浏览器访问终端访问FTP用户配置—2PC机访问ftp站点IE浏览器访问终端访问 FTP服务搭建 网络拓扑//交换机忽略不计 FTP服务IP:192.168.1.1 PC机IP…

【研发管理】产品经理知识体系-产品创新中的市场调研

导读&#xff1a;在产品创新过程中&#xff0c;市场调研的重要性不言而喻。它不仅是产品创新的起点&#xff0c;也是确保产品成功推向市场的关键步骤。对于产品经理系统学习和掌握产品创新中的市场调研相关知识体系十分重要。 目录 概述&#xff1a;市场调研重要性 1、相关概…