C# GetField 方法应用实例

目录

关于 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.mzph.cn/news/828662.shtml

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

相关文章

WPS-EXCEL:快速删除多个线条对象

问题图 我需要将线条快速删除 方法一:使用定位对象功能 使用定位功能&#xff1a;按Ctrl G打开定位对话框。在对话框中&#xff0c;点击“定位条件”。 定位对象&#xff1a;在定位条件对话框中&#xff0c;勾选“对象”选项&#xff0c;然后点击“确定”。这样&#xff0c;…

CTF之变量1

拿到题目发现是一个php代码&#xff0c;意思是用get方式获取args参数。 至于下面那个正则表达式怎么绕过暂且不知&#xff0c;但是题目最上面告诉我们lag In the variable ! &#xff08;意思是flag就在变量中&#xff09;。 那我们就传入全局变量globals&#xff08;&#xf…

spring引入外部属性文件

spring引入外部属性文件 有时候我们并不想把所有的配置信息都放到spring的配置文件中&#xff0c;这样的话也不太好维护&#xff0c;比如说数据库的信息 <bean name"dataSource" class"com.alibaba.druid.pool.DruidDataSource" init-method"init&…

vue调用post方法并且后端代码需要接收ids

首先在ts文件里接收一个参数 data&#xff0c;类型为对象。该函数通过调用 post 函数向指定的路径接口 发送数据 export function calculateScore(data: object) {return post(写你的接口, data) }//以上为举例&#xff0c;calculateScore等会会在vue页面去调用然后我这里做处…

【构建|Gradle】Gradle常见使用问题集锦

文章目录 1. 更新Gradle仓库或者迁移本地Maven仓库后报错2. Gradle配置使用mavenLocal()后,假如添加新的依赖,在Maven仓库中不可见3. 取消使用idea+Gradle创建项目时自动生成.main结尾的子module文章持续更新中。。。 1. 更新Gradle仓库或者迁移本地Maven仓库后报错 错误信息…

【Python】模拟windows文件名排序

实现了一种模拟windows排序的python方法&#xff0c;其排序规则为&#xff1a; 不处理浮点数特殊字符&#xff08;如&#xff1a;&、$、# 等&#xff09;排在数字和字母之前&#xff1b;数字优先于字母排序&#xff1b;数字是连着的整数&#xff0c;应该按照整数进行排序&…

Linux 三剑客之AWK

1. 命令 awk [参数] [处理内容] [操作对象] 1.1. 参数 -F参数:这个参数用于指定输入字段的分隔符。例如,awk -F: {print $1} file.txt 会将文件file.txt中以冒号分隔的第一个字段打印出来。如果不指定-F参数,awk默认使用空格或制表符作为字段分隔符。 -v参数:该参数用于在…

人机协同中的墨菲定律

墨菲定律&#xff1a;如果有两种或两种以上的方式去做某件事情&#xff0c;而其中一种选择方式将导致灾难&#xff0c;则必定有人会做出这种选择。人机协同中的墨菲定律如何呢&#xff1f;下面我们将对此进行简单讨论。 人机协同中的墨菲定律可以理解为&#xff1a;如果在人与机…

户外指南——时代产物

分类 一级分类&#xff1a; 衣&#xff1a;除了上述提到的&#xff0c;还包括衣物的材质、款式多样性、与身份地位的关联等。 食&#xff1a;还包括饮食的文化内涵、地域特色、对特殊饮食需求的满足等。 住&#xff1a;还包括居住空间的合理布局、智能家居的应用、与自然环境…

不定期会议对团队开发的影响(项目管理篇)

不定期会议&#xff0c;即没有固定周期或事先规划的临时召集的会议&#xff0c;对于团队开发可能产生多种影响&#xff0c;既有积极的一面&#xff0c;也有潜在的挑战。以下是具体分析&#xff1a; 积极影响&#xff1a; 应对突发情况&#xff1a; 不定期会议能够迅速响应项…

C# 异步编程模式详解

在软件开发中&#xff0c;异步编程是一种重要的编程范式&#xff0c;它允许代码在等待操作完成时继续执行。特别是在处理耗时的I/O操作&#xff08;如文件读写、网络请求和数据库操作&#xff09;时&#xff0c;异步编程可以显著提高应用程序的响应性和性能。C# 语言提供了丰富…

微信小程序中前端 授权登录获取用户的openid

序言&#xff1a; 集百家之所长&#xff0c;方成此篇&#xff0c;废话少说&#xff0c;上代码&#xff1b;找好你的小程序APPID,AppSecret(小程序密钥)&#xff0c;进行配置&#xff0c;然后复制粘贴代码&#xff0c;就可以了。 //微信小程序授权登录获取用户的openidwx.getUse…

B2B企业如何做好谷歌Google广告推广营销布局?

当今全球化的商业环境中&#xff0c;B2B企业要想在激烈的市场竞争中脱颖而出&#xff0c;拓展海外市场成为了必经之路。而谷歌Google广告&#xff0c;作为全球最大的在线广告平台&#xff0c;无疑是企业触达全球潜在客户的黄金钥匙。云衔科技通过专业服务助力企业轻松开户与高效…

ASAN

文章目录 ASAN 简介实例一&#xff0c;检测内存泄漏实例二&#xff0c;检测悬空指针访问实例三&#xff0c;检测堆溢出实例四&#xff0c;检测栈溢出ASAN 原理使用技巧KASAN ASAN 简介 ASAN 是 Address Sanitizer 的简称&#xff0c;是 GCC 自带的内存问题检查工具&#xff0c…

Java苍穹外卖01-开发环境搭建(Git、nginx)-Swagger-员工管理

一、开发环境搭建 1.项目架构 2.Git版本管理 在IDEA中可以一键搭建并commit&#xff0c;当Git远程仓库搭建后就可以push 3.前后端联调 Builder注解&#xff1a; 加了注解后就可以通过这样的方式创建对象 接收传入的是dto对象&#xff0c;传出去的对象为vo对象 4.nginx反向…

JavaScript 前端枚举库 js-enumerate

JavaScript 前端枚举库js-enumerate 1. 安装1.1 NodeJS1.2 Bower 2 使用2.1 constructor构造函数2.2 register全局注册2.3 用法示例2.4 前端组件中使用2.5 其他扩展用法2.6 内置属性2.7 Enum object API2.8 其他注意事项 3. 推荐 Enum is a javascript enumeration module. It …

4.18.2 EfficientViT:具有级联组注意力的内存高效Vision Transformer

现有Transformer模型的速度通常受到内存低效操作的限制&#xff0c;尤其是MHSA&#xff08;多头自注意力&#xff09;中的张量整形和逐元素函数。 设计了一种具有三明治布局的新构建块&#xff0c;即在高效FFN&#xff08;前馈&#xff09;层之间使用单个内存绑定的MHSA&#x…

面向初学者的网络安全(二)

原文&#xff1a;annas-archive.org/md5/8570b4b9b47974c7302ce023e1eb9bc8 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 九、攻击和防御方法的演变 当我写下这本书的第一版时&#xff0c;网络安全只是网络安全专家和精明的高管感兴趣的话题。这本书是为了让任何人…

数组、链表、集合、table、map、二叉树、索引、数据库

数据结构&#xff1a;帮助数据快速读写的一种结构模型&#xff0c;数据库是 系统文件索引&#xff08;索引是各种数据结构提高数据检索以平衡数据读写速度&#xff0c;系统文件是存储用户真正的数据&#xff0c;比如业务表数据、文件、图片等等&#xff09; 1.数组&#xff1a…

本地缓存数据存入文件中

文章目录 演示代码本地缓存数据存入文件从文件提取数据到本地缓存工具类 实战初始化操作执行 本地缓存数据存入文件 的线程任务持久化工具类 演示代码 本地缓存数据存入文件 public static void testQ15() {LinkedBlockingDeque<ConcurrentHashMap<String, ConcurrentHa…