使用.net 中的动态方法编程备忘录5(在动态方法中使用条件语句)

别再让COGI拖慢你的SAP接口!手把手教你配置BAPI_PRODORDCONF_CREATE_TT的同步货物移动 本文深入解析SAP生产订单报工接口中的COGI问题,通过BAPI_PRODORDCONF_CREATE_TT的同步配置实战,解决异步更新导致的性能瓶颈。文章详细介绍了增强点配置和性能验证,帮助用户彻底消除COGI堆积,提升接口效率。 阅读详情

1、程序执行时,除了顺序执行外,任何程序设计语言,都有条件语句、循环语句、无条件转移语句。而条件语句,几乎每个过程都离不开。

在高级程序编程语言中,使用特定的关键字,编写条件语句是很方便的,如 if语句、if-else、if-else if语句、switch语句等等。

但微软中间语句(MSIL)无特定的条件语句,要实现条件转移,必须定义Label,自己以比较语句、条件转移语句组合来实现。

 

2、分析条件语句

 

看下面的C#示例:

 

分析一下,要用MSIL实现上述很简单的例子:

a)、比较 i 与 j 是否相等;

b)、如不相等,则转移到下一个比较(既 e 处,以执行下一个else if),这里是第一次转移,条件转移,需要一个Label;

c)、如相等,则顺序执行本 if 块内代码;

d)、本代码块执行完毕,则转移到此 if-else if-else 条件语句之后,既j,此是第二个转移,无条件转移,需要第二个Label;

e)、比较 i 是否小于 j;

f)、如不小于,则转移到i处,以执行下一个 else,这里是第三个转移,条件转移,需要第三个Label;

g)、小于,则顺序执行;

h)、小于后的代码块执行完毕,转移到最后,既j;

i)、此时开始执行 i>j的代码;

j)、所有判断结束;

k)、将变量ret加载到栈,并返回。

 

 

3、相应的 MSIL代码:

 


.method private hidebysig static string CompareResult(int32 i, int32 j) cil managed
{
    .maxstack 2
    .locals init (
        [0] string ret,
        [1] string CS$1$0000,
        [2] bool CS$4$0001)
    L_0000: nop
    L_0001: ldstr "/u6bd4/u8f83/u7ed3/u679c/uff1a"
    L_0006: stloc.0
    L_0007: ldarg.0
    L_0008: ldarg.1
    L_0009: ceq
    L_000b: ldc.i4.0
    L_000c: ceq
    L_000e: stloc.2
    L_000f: ldloc.2
    L_0010: brtrue.s L_0020
    L_0012: ldloc.0
    L_0013: ldstr "/u76f8/u7b49"
    L_0018: call string [mscorlib]System.String::Concat(string, string)
    L_001d: stloc.0
    L_001e: br.s L_0045
    L_0020: ldarg.0
    L_0021: ldarg.1
    L_0022: clt
    L_0024: ldc.i4.0
    L_0025: ceq
    L_0027: stloc.2
    L_0028: ldloc.2
    L_0029: brtrue.s L_0039
    L_002b: ldloc.0
    L_002c: ldstr "i < j"
    L_0031: call string [mscorlib]System.String::Concat(string, string)
    L_0036: stloc.0
    L_0037: br.s L_0045
    L_0039: ldloc.0
    L_003a: ldstr "i > j"
    L_003f: call string [mscorlib]System.String::Concat(string, string)
    L_0044: stloc.0
    L_0045: ldloc.0
    L_0046: stloc.1
    L_0047: br.s L_0049
    L_0049: ldloc.1
    L_004a: ret
}

 

 4、在动态方法中使用Label实现转移

 

要使用Label转移,首先要使用 ILGenerator 类的 DefineLabel 方法定义 Label;

其次,在需要转移到的地方,使用ILGenerator 类的 MakeLabel 方法,将前面定义的Label的地址设定在此处。

下面是使用动态方法的示例代码(此代码是写博客时现写的,未测试)

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错 本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。 阅读详情

相关推荐

Mac---安装Navicat

把这个填充好的字符串放入刚才打开的RSA在线加解密的网站中的第二个框框(替换之前的请求码),第一个框框不动(还是之前第10步骤中的私钥),点击RSA私钥加密,这时会得到一个加密的字符串,这个就是激活码。{“K”:“你的K值”, “N”:“52pojie”, “O”:“52pojie.cn”, “DI”:“你的DI值”, “T”:你的时间戳}链接: https://pan.baidu.com/s/1mEVY4hnKdktg-p7DBIfD7A 提取码: twwg。Navicat会弹出一个对话框,点击“注册”

weixin_53970868的博客 1万+

构建高效脚本备忘录:从环境配置到最佳实践的开发效率指南

在软件开发与自动化运维中,脚本是连接环境配置、任务执行和系统集成的关键工具。其核心原理在于通过预定义的命令序列,将重复性操作自动化,从而提升开发与部署效率。脚本的技术价值不仅体现在减少人工操作错误,更在于实现复杂工作流的标准化与可重复性。无论是Shell脚本的系统管理、Python脚本的数据处理,还是特定工具(如报表设计器)的内嵌脚本,其应用场景已渗透到部署、测试、数据处理等各个环节。本文聚焦于如何系统化构建脚本备忘录,以解决环境变量配置、依赖管理等常见问题,并融入shell脚本和python脚本等热词的实

weixin_34389926的博客 343

Skynet 框架面试题

本文整理了游戏服务端开发面试中 Skynet 框架的高频考点,涵盖底层架构、消息派发、协程调度、网络 I/O、harbor 跨机通信、内存管理、socket 处理、阻塞操作、错误处理等核心内容。全面覆盖 Skynet 框架的原理、使用和实战问题,追求深入准确,拒绝八股文。

小赖的博客 381

深入浅出.NET代码生成系列(7):动态生成代码与编译综合示例

前面说了这么多,大家可能会觉得,好像没弄出个玩意儿来啊,对啊,所以,本文就来个可以弄出个玩意儿的东东。 说明一下,这是一个综合示例,分为两大部分,第一部分,生成代码,输出到控制台窗口中;第二部分,把这些代码动态进行编译,并生成一个WinForm应用程序,双击动态编译的程序可以运行起来,点击窗口上的按钮,会弹出一个对话框。 好,下面我把整个示例的代码贴出来,很简单,你就新建一个控制台应用程序...

java开发指南博客 【转载】 193

使用在UE5中使用AirSim插件Eigen库头文件引用报错,出现报错的解决方式

如图所示,用红线圈出的两条头文件引用会报错,提示无法找到他们,但是可以发现的是,他们的路径书写是没有问题的。在终端中运行时候,会出现如下的报错。

GFCLJY的博客 1006

海洋与地质地理信息数据下载网站汇总集锦

各种海洋与地质地理信息数据集合

qq_36980284的博客 1268

.Net 字符集与编解码

如果参数是一个对象,而对象中的字符串类型需要在定义封装对象的位置,通过StructLayout 属性的CharSet 来设置。这里首先测试了.Net 在Windows环境下运行情况下,.Net 默认使用ANSI 编解码,其中在 DllImport 中指定的 CharSet 对导出函数的直接字符串参数生效。这里主要针对于使用C++ API是遇到的一些编码被封送的情况测试。跟上面类似,但是Unicode 传送的不成功,想必是类型问题,Unicode 对应C++中应该对应使用wchar* 数组。

xunmeng2002的专栏 930

遥感影像道路提取算法——SGCN

用于从高分辨率遥感图像(TGRS)中提取复杂环境中道路的分割深度可分离图卷积网络摘要:高分辨率遥感图像的道路信息在各个领域得到广泛应用,基于深度学习的方法有效地显示了较高的道路提取性能。然而,在高分辨率遥感图像中,检测柏油路封闭或树木覆盖的道路,仍存在一些挑战,限制了提取的准确性:1)道路之间的阶级内差异较大,城市物体,特别是道路和建筑物之间的阶级间差异不明显;2)被树木、阴影和建筑物遮挡的道路难以提取;3)道路缺乏高精度遥感数据集。

littleyy666的博客 3845

使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)

    使用动态方法编程,常常不知生成的动态方法是否正确,这里介绍,使用工具软件查看动态生成的代码的方法。    1、下载并安装可反编译.net程序的工具    我一直用Reflector.exe来反编译和查看exe、dll文件的代码,Reflector.exe 有免费版本,足够使用了。首先,要下载Reflector.exe,只要在搜索引擎搜一下,很容易得到这个软件的下载链接。    2、将发出的动态方法保存到.dll文件    正常情况下,动态方法或动态类、动态生成的程序集并不需要保存,而为了反编译和查看

海底捞针 1701

【华为OD】华为性格测试(综合测试)高分策略

1、性格测试非常重要,是一次否决制,18 个月有效期,所以态度一定要认真对待,不要随便乱选;2、做题原则:正向原则,积极乐观向上3、时间为 25-30 分钟,会频繁出现重复选项重复出现的题目注意一致性。

笑着的程序员的博客 3万+

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 184

.NET 创建动态方法方案及 Natasha V9

虽然 .NET9 支持保存程序集了,但 ALC 的卸载功能有点难搞,.NET 官方对 ALC 的卸载操作几乎是无能为力的,从理论上来讲只要你的类在使用中,这个类就无法被卸载,这种情况很多,一个静态泛型类,或一个全局事件,或被编译到某个不被清理的方法中,又不提供清理方法,他们就会成为程序的僵尸类型。相比前两者,Natasha 需要注意的是 “域” 操作和 Using 引用,有了 “域” 更加方便隔离程序集和卸载,如果你的动态代码创建的程序集永远都是有用的,使用默认域即可。

weixin_55010563的博客 1270

光学设计仿真软件:Code V_(8).场曲和色差校正

通过以上步骤和代码示例,用户可以更好地理解如何在Code V中进行场曲和色差的校正。这些技术不仅有助于提高光学系统的成像质量,还可以为后续的光学设计提供重要的参考。在实际应用中,用户可以根据具体需求选择合适的校正方法和优化策略,以达到最佳设计效果。

kkchenjj的博客 1784

.NET 反射的介绍和简单应用

反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。发现信息(如名称、事件处理程序的数据类型、自定义特性、声明类型以及事件的反射的类型),并添加或删除事件处理程序。来定义和加载程序集,加载程序集清单中列出的模块,以及在此程序集中定位一个类型并创建一个它的实例。发现信息(如名称、数据类型、声明类型,反射的类型和属性的只读或可写状态),并获取或设置属性值。发现信息,如参数的名称、数据类型、参数是输入参数还是输出参数以及参数在方法签名中的位置。发现信息,如名称、访问修饰符(如。

lwpoor123的博客 1451

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

动态网页初学者用ASP.NET制作备忘录实例

   一位ASP.net初学者学习过程中整理的备忘录,包括“打开新的窗口并传送参数,为按钮添加对话框,删除表格选定记录,删除表格记录警告”等等常见问题的解决方法。1. 打开新的窗口并传送参数:  传送参数:response.write("window.open(*.aspx?id="+this.DropDownList1.SelectIndex+"&id1="+...+")")  接收参数:s

软件开发学习笔记 1234

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

DevExpress界面开发正式进入.NET 5.0时代,这些Blazor UI组件亮点需要了解!

上DevExpress中文网,获取第一手最新产品资讯! DevExpress Universal Subscription拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 屡获大奖的软件开发平台DevExpress Universal 2020年全新首发v20.2,最新版拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应用提供直观

需要界面开发、IDE工具研发中文教程资料的小伙伴,记得私信我~ 1130

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ASP.NET中的设计模式

GOF设计模式著作中的23种设计模式可以分成三组:创建型(Creational),结构型(Structural),行为型(Behavioral)。下面来做详细的剖析。创建型创建型模式处理对象构造和引用。他们将对象实例的实例化责任从客户代码中抽象出来,从而让代码保持松散耦合,将创建复杂对象的责任放在一个地方,这遵循了单一责任原则和分离关注点原则。下面是“创建型”分组中的模式:1.Abstract Fa

【Erica W】有问题,就问神奇海螺吧! 790

Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第4回(忍者专辑)

色即设——设计,从网页设计师的角度出发。因为自己的的特殊性(本身是软件工程师,但是对网页设计却有浓厚的兴趣),所以我的此系列文章不仅仅从编程角度出发,还将从设计的角度出发来细数AjaxControlToolkit系列控件,告诉你这些控件最终的结构表现形式、样式,还有如何修改他们的样式使之适合于你的网页整体规划。窥,小视也——《说文》,此小视非必小视呀。此小视的意思是:水平有限,不能望其全貌,仅能管

夏风鱼的专栏 568

[最新版]Asp.net Ajax 编程备忘录----细数28个服务器端控件 [转载]

转载在-------http://www.cnblogs.com/me-sa/articles/568959.html Asp.net Ajax 编程备忘录----细数28个服务器端控件 [原创]     时间:2006-11-22              作者:坚强2002开篇:To forget what we think we know about the limitations

云中漫步 1966

C++/windows开发备忘录

windows使用cmd命令行g++编译C++源文件,常用工具Everything、BeyondCompare、Wireshark、SourceTree、Qt下载,几个国内的镜像、dumpbin、depends、ProcessExplorer、VLD内存泄漏检测,Windows中使用命令行杀进程。QT5.15.2+VS2019环境搭建。由于找不到MSVCR100.dll,无法继续执行代码;应用程序无法正常启动0xc000007b

weixin_40355471的博客 7021

net工程师必懂题

 net工程师必懂题     1.面向对象的思想主要包括什么?继承多态封装●封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。●继承:子类拥有父类的所有数据和操作。●多态:一个程序中同名的不同方法共存的情况。有两种形式的多态–重载与重写。 2.什么是ASP.net中的用户控件用户控件就是.ascx扩展名的东西喽,可以拖到不

cspyb的专栏 1221

asp.net必懂题

1.面向对象的思想主要包括什么?继承多态封装●封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。●继承:子类拥有父类的所有数据和操作。●多态:一个程序中同名的不同方法共存的情况。有两种形式的多态–重载与重写。 2.什么是ASP.net中的用户控件用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可

fredlau 痞子刘的博客 1743

【原创】利用动态二进制加密实现新型一句话木马之客户端篇

概述 本系列文章重写了java、.net、php三个版本的一句话木马,可以解析并执行客户端传递过来的加密二进制流,并实现了相应的客户端工具。从而一劳永逸的绕过WAF或者其他网络防火墙的检测。 本来是想把这三个版本写在一篇文章里,过程中发现篇幅太大,所以分成了四篇,分别是: 利用动态二进制加密实现新型一句话木马之Java篇 利用动态二进制加密实现新型一句话木马之.NET篇 利用动态二进制加密实现新型...

weixin_33729196的博客 406

asp.net必须懂

1.面向对象的思想主要包括什么?继承多态封装●封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。●继承:子类拥有父类的所有数据和操作。●多态:一个程序中同名的不同方法共存的情况。有两种形式的多态–重载与重写。 2.什么是ASP.net中的用户控件用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可

garethzhen的专栏 615

.net bs

1.面向对象的思想主要包括什么?2.什么是ASP.net中的用户控件 用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整.问这样的问题,一般是迷惑你.因为新手还是分不清楚用户控件和服务器控件(也称自定

teakingxinyig的专栏 759
上一篇: 使用.net 中的动态方法编程备忘录4(DynamicMethod 类的构造函数及访问其他类的私有成员)
下一篇: 使用.net 中的动态方法编程备忘录2(使用发出动态方法的意义)
IsMe
博客等级 码龄25年 4粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值