如何使用编译条件使 C# 代码拿来就能用

Visual Studio 2022 中 有 .NET Framework 和 .NET Core 编译平台

1、为了代码迁移方便通用,使用预处理器指令来判断编译平台

Visual Studio 2022 中 有 .NET Framework 和 .NET Core 编译平台,编译代码有区别,为了代码迁移方便通用,可以使用条件编译。在C#中,您可以使用预处理器指令来判断编译平台。#if、#elif、#else和#endif指令允许您根据定义的符号来包含或排除代码段。

对于判断编译平台,您可以使用预定义的DEBUG和TRACE符号,或者使用NETCOREAPP、NETFRAMEWORK等符号,这取决于您的目标框架。

以下是一个判断是否为.NET Core 或 .NET Framework 的示例:

#if NETCOREAPP
// .NET Core 特有的代码
#elif NETFRAMEWORK
// .NET Framework 特有的代码
#endif

Visual Studio 2017中编译条件要自己输入,如下:
在这里插入图片描述

2、中文代码页在 .NET Framework 和 .NET Core 编译不一样

在 .NET Framework 中默认为 GB2312 或 GB18030,视操作系统决定,.NET Core 中没有 GB2312 或 GB18030 代码页,如下代码获得的 byte 流将不一样。

byte[] bytes = Encoding.Default.GetBytes(Cstring);  

对于【中国】:编码不一样,十六进制字符不一样

E4 B8 AD E5 9B BD 中国为 UTF8 的十六进制字符
2D 4E FD 56 为Unicode
D6 D0 B9 FA 为GB2312 GB18030

在 .NET Core 中需要引入中文代码页,这样中文代码页在 .NET Framework 和 .NET Core 编译运行,就要使用条件编译,获得相同的结果,直接上代码:

#if NETCOREAPP
        // .NET Core 特有的代码
       /// <summary>中文字符串转换到16进制字符</summary>
       /// <param name="Cstring">中文</param>
       /// <param name="encoding">编码</param>
       /// <returns>返回16进制字符</returns>
        public static string ChsStringToHexStr(string Cstring, string encoding = "GB18030")
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);//引入代码页
            //"GB2312" or "GB18030"
            byte[] bytes = Encoding.GetEncoding(encoding).GetBytes(Cstring);//使用编码页
            //
            //byte[] bytes = Encoding.Unicode.GetBytes(Cstring);          

            string HexStr = Convert.ToHexString(bytes);
            HexStr = InsertString(HexStr, 2, " ");
            return HexStr;
        }
#elif NETFRAMEWORK
        // .NET Framework 特有的代码,VS2017运行通过
       /// <summary>中文字符串转换到16进制字符</summary>
       /// <param name="Cstring">中文</param>
       /// <param name="encoding">编码</param>
       /// <returns>返回16进制字符</returns>
        public static string ChsStringToHexStr(string Cstring, string encoding = "GB18030")
        {
            //"GB2312" or "GB18030"
            byte[] bytes = Encoding.GetEncoding(encoding).GetBytes(Cstring);
           
            // Convert.ToHexString(bytes);
            string HexStr = "";
            if (bytes != null)
            {
                for (int i = 0; i < bytes.Length; i++)
                {
                    HexStr += bytes[i].ToString("X2");
                    HexStr += " "; // 两个Hex数值以空格隔开
                }
            }
            return HexStr;
        }
#endif

以上就是通过条件编译代码,使中文字符串转换到16进制字符能够在不同的编译环境能够伸手拿来使用,直接上菜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中游鱼

获取完整源代码,提高工作效率

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值