C# GetField 方法应用实例

news2025/1/12 3:44:47

目录

关于 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.coloradmin.cn/o/1623927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制造企业看重的OEE,到底是怎么回事?

OEE&#xff08;Overall Equipment Effectiveness&#xff0c;全局设备效率&#xff09;是一个用于评估生产设备性能和效率的指标&#xff0c;它通过综合考虑设备的可用率、性能率和良品率等因素&#xff0c;来评估设备的整体表现和生产效果。 其计算公式为&#xff1a; OEE …

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程&#xff0c;包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步&#xff1a;需求分析和系统设计。演示&#xff1a;ym.fzapp.top 第一步&#xff1a;需求分析 确…

Oceanbase体验之(二)Oceanbase集群的搭建(社区版4.2.2)

资源规划 3台observer CPU:4C及以上 内存&#xff1a;32G及以上 硬盘操作系统500G 存储盘1T及以上 虚拟机可以直接划分&#xff0c;物理机需要提前规划好资源 一、上传oceanbase安装包 登录ocp选择软件包管理 上传Oceanbase软件包&#xff08;软件包获取路径 官网免费下载社…

双向链表介绍

带头链表⾥的头节点&#xff0c;实际为“哨兵位”&#xff0c;哨兵位节点不存储任何有效元素&#xff0c;只是站在这⾥“放哨的”。哨兵位存在的意义&#xff1a;避免链表出现死循环。 双向链表的结构&#xff1a;数据指向下一个节点的指针指向前一个节点的指针 typedef in…

Postman - 设置变量

场景&#xff1a; 比如你接口都有权限&#xff0c;访问需要每调一个接口都手动放token的值&#xff0c;这个时候就可以搞个全局的变量&#xff0c;只设置一次就可以了 1、设置变量 Environments -> Globals - > 设置key 、value 2、使用变量 {{你得变量名-key}} 3…

[Linux][多线程][四][线程同步][POSIX信号量][环形队列生产者消费者模型][线程池]

目录 1.POSIX信号量1.基本概念2.为什么要有信号量? --> 提高效率3.信号量的PV操作4.PV操作必须是原子操作5.申请信号量失败被挂起等待6.理解信号量大致结构 2.信号量函数1.初始化2.销毁3.等待信号量 -- 申请信号量 --> P()4.发布信号量 -- 释放信号量 --> V() 3.基于…

LeetCode 2739. 总行驶距离

题目链接https://leetcode.cn/problems/total-distance-traveled/?envTypedaily-question&envId2024-04-25 简单题&#xff0c;看代码思考一下即可理解 class Solution {public int distanceTraveled(int mainTank, int additionalTank) {int res 0;while (mainTank >…

探索直播+电商系统中台架构:连接消费者与商品的智能纽带

随着直播电商的崛起&#xff0c;电商行业进入了全新的智能时代。直播形式的互动性和即时性为消费者提供了全新的购物体验&#xff0c;而电商平台则为商品的展示、销售和配送提供了强大的支持。在这一背景下&#xff0c;直播电商系统中台架构成为了连接消费者与商品的智能纽带&a…

模块化 手写实现webpack

模块化 common.js 的导入导出方法&#xff1a; require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别&#xff1a; require属于动态类型&#xff1a;加载执行 同步 esmodul是静态类型&#xff1a;引入时并不会真的去…

Oracle 21 C 安装详细操作手册,并配置客户端连接

Oracle 21 C 安装详细操作手册 Win 11 Oracle 21C 下载&#xff1a; Database Software Downloads | Oracle 中国 云盘共享 链接&#xff1a;https://pan.baidu.com/s/12XCilnFYyLFnSVoU_ShaSA 提取码&#xff1a;nfwc Oracle 21C 配置与登陆&#xff1a; 开始菜单 NetMa…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块&#xff0c;最终导致数据库宕机&#xff0c;通过数据抢救&#xff0c;恢复了全部的数据。下面是详细的故障分析诊断过程&#xff0c;以及详细的解决方案描述&#xff1a; 故障现象 数据库宕机之后&#xff0c…

重要!!!涉及huggingface和kaggle的深度学习各种(文本图像视频音频)任务及其对应模型和案例代码总结

可以到hugging face官网&#xff0c;里面有对应的各种学习任务&#xff0c;数据集以及代码和预训练模型也可以到kaggle官网&#xff0c;里面有各种模型以及代码、数据集等。特色优势是&#xff1a;里面对应的数据集和模型都会有超过3个的代码&#xff0c;是用户发布的。 https…

如何批量跟踪京东物流信息

随着电商行业的快速发展&#xff0c;快递业务日益繁忙&#xff0c;无论是商家还是消费者&#xff0c;都需要一种高效、便捷的快递查询工具。快递批量查询高手软件应运而生&#xff0c;以其强大的功能和便捷的操作体验&#xff0c;赢得了广大电商、微商精英们的青睐。 快递批量…

4.25 C高级

思维导图 作业 2.输入两个数&#xff0c;实现两个数的排序 3.输入一个数&#xff0c;计算是否是水仙花 if ((g*g*gs*s*sb*b*bnum)) then echo YES else echo no fi 4.输入一个成绩实现登记判断 90-100A 80-89B 70-79C 60-69D 0-59E

第二证券|光通信概念拉升,吴通控股、胜蓝股份涨停,新易盛等大涨

光通信概念24日盘中强势拉升&#xff0c;截至发稿&#xff0c;吴通控股、胜蓝股份“20cm”涨停&#xff0c;新易盛涨超10%&#xff0c;四川九洲亦涨停&#xff0c;源杰科技、铭普光磁、立昂技能等涨超5%。 吴通控股昨日晚间披露的一季度报告显示&#xff0c;公司完成营业收入1…

CTF网络安全大赛详情

网络安全已成为现代社会的一个关键挑战&#xff0c;随着互联网技术的飞速发展&#xff0c;从个人隐私保护到国家安全&#xff0c;网络安全的重要性日益突显。为了应对这一挑战&#xff0c;CTF&#xff08;Capture The Flag&#xff0c;中文&#xff1a;夺旗赛&#xff09;应运而…

Clickhouse离线安装教程

https://blog.51cto.com/u_15060531/4174350 1. 前置 1.1 检查服务器架构 服务器&#xff1a;Centos7.X 需要确保是否x86_64处理器构架、Linux并且支持SSE 4.2指令集 grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 …

java-spring 06 图灵 getBean方法和 doGetBean方法

01.一般的流程是&#xff0c;这里是从上一章的preInstantiateSingleton方法顺序过来的。 getBean() -> doGetBean() -> createBean() -> doCreateBean() -> createBeanInstance() -> populateBean() -> initializeBean() 02.getBean方法&#xff0c;一般就…

网络安全中的加密与解密技术:全面指南及实验

引言 在当今数字时代&#xff0c;加密技术是保护数据安全的重要工具。从个人通讯到企业数据保护&#xff0c;加密帮助确保信息在存储和传输过程中的机密性和完整性。本文旨在全面介绍加密和解密的原理、常见算法以及实验&#xff0c;以帮助读者深入理解其在网络安全中的应用。…

自然资源调查监测评价系统:守护绿色地球的先锋

随着人类对自然资源的日益依赖&#xff0c;如何合理、可持续地利用这些资源成为了全球关注的焦点。自然资源调查监测评价系统&#xff0c;作为守护绿色地球的重要工具&#xff0c;正发挥着越来越重要的作用。本文将带您了解这一系统的内涵、功能及其在现代社会中的意义。一、自…