C# GetField 方法应用实例

2024-04-26 00:12

本文主要是介绍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 方法实例讲解参考,不做为实际的测评数据和测评效果。

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

这篇关于C# GetField 方法应用实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936189

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2