求教VB.NET中GenerateHeader函数代码的执行逻辑与含义
这段VB.NET代码的功能说明
这是一个基于反射实现的通用记录拼接方法,从日志里的ASTMHeader标记能看出来,它原本是用于ASTM医疗检验设备通信协议的帧头生成,核心作用是自动把当前类实例的属性值拼接成竖线分隔的结构化字符串。
逐行逻辑拆解
原代码如下:
Public Function GenerateHeader(ByVal FrameNumber As String) As String Dim HeaderRecord As String = FrameNumber Try For Each P As System.Reflection.PropertyInfo In Me.GetType().GetProperties() If P.CanRead Then If P.GetValue( Me, Nothing)Is Nothing Then 'get value of me. HeaderRecord += "|" Else HeaderRecord += P.GetValue(Me, Nothing).ToString & "|" End If End If Next Return HeaderRecord Catch ex As Exception LogError("ASTMHeader", "GenerateHeader", Err.Erl, Err.Description, "") Return HeaderRecord End Try End Function
具体执行流程:
- 方法入参为字符串类型的帧号
FrameNumber,返回值为拼接完成的头记录字符串。 - 初始化结果字符串
HeaderRecord,把传入的帧号作为字符串的第一个内容。 - 进入异常容错块:如果后续执行出问题,不会直接抛出异常中断程序,会记录错误后返回已拼接的内容。
- 核心反射逻辑:
- 通过
Me.GetType().GetProperties()获取当前类的所有公开属性,逐个遍历 - 跳过不可读的属性(只有带
Get访问器的属性才会被处理) - 读取当前属性在当前实例上的值:如果值为空(VB里的
Nothing对应C#的null),就直接拼接一个分隔符|,代表该字段留空;如果值不为空,就把值转成字符串后拼接,后面再跟分隔符|
- 通过
- 所有属性遍历完成后,返回拼接好的完整字符串。
- 异常捕获逻辑:如果执行过程中报错,调用
LogError方法记录错误所属模块、方法名、错误行号、错误描述,之后返回已经拼接了一部分的结果字符串。
设计特点与注意事项
- 优点:不需要硬编码每个属性的拼接逻辑,后续类新增、删除属性时这个方法不需要修改,会自动适配属性变化,维护成本低。
- 拼接输出格式为
帧号|第一个属性值|第二个属性值|第三个属性值|...|,字符串末尾会多一个分隔符|,如果业务场景不允许末尾多余分隔符,需要额外处理。 - 反射获取属性的顺序和类中属性的定义顺序一致,如果是用于协议拼接这类对字段顺序有严格要求的场景,不能随意调整类中属性的书写顺序,否则会出现字段错位。
- 反射的执行性能比硬编码拼接低,但这类通信帧生成属于低频操作,性能影响可以忽略。
内容的提问来源于stack exchange,提问作者Custom Software
相关产品推荐
相关产品推荐

