艾塔 发布的文章 - 至高岭
首页
丽琪的炼金工坊
搜 索
1
Openwrt/Linux 启用Https,申请Lets Encrypt证书
302 阅读
2
使用Sqlsugar连接SqlCipher(sqlite)
159 阅读
3
相册模式
156 阅读
4
Softether VPN/Open VPN
135 阅读
5
WIN-ACME
124 阅读
Net
Javascript
Docker
Linux
Vue
Python
工具
资源
其他
登录
搜 索
标签搜索
Markdown
Joe
艾塔
累计撰写
21
篇文章
累计收到
8
条评论
首页
栏目
Net
Javascript
Docker
Linux
Vue
Python
工具
资源
其他
页面
丽琪的炼金工坊
用户登录
登录
找到
21
篇与
艾塔
相关的结果
2023-05-05
别吃糖(二)
集合类初始化赋值 //使用对象初始化器:,使用对象初始化器,必须提供一个无参的构造函数,可以只给部分属性初始化 User xiaohong = new User() { Name = "小红", phone = "1232154566", Address = "上海" }; //集合初始化器 List<User> listUser = new List<User>() { xiaohong, new User(), new User(), new User(), new User(), new User() };索引初始化var numbers = new Dictionary<int, string> ;等同于numbers[7] = "seven";字符串格式化//String.Format有些不方便的地方是:必须输入"String.Format",使用占位符、必须顺序来格式化、这点容易出错。var s = String.Format(" is years old", p.Name, p.Age);//新的语法糖使用起来相对更轻松些://使用$开头 字符串内变量使用var s = $" is years old";NULL条件运算符?. ?[] 和??aEmployee = null; var b = aEmployee?.Salary; var b = sample?[1].Name; SQL.Teacher = SQL.Teacher ?? new Teacher();在对象使用前检查是否为null。如果对象为空,则赋值给变量为null,如果对象不为空,则调用对象的成员取值,并赋值给变量。如果不使用?,程序会抛出System.NullReferenceException??组合,不为null值时,返回原值;为null值时,返回 ?? 后替代值可以大量减少空判断的代码nameof表达式用于获取某些类名, 字段名等Console.WriteLine(nameof(name));三元运算符 ?: var c =a>=b?a:b; //等同于 if (a >= b) { return a; } else { return b; } 数学分隔符 _var a = 1235_5678;var a = 12355678;操作符重载C#运算符重载
2023年05月05日
24 阅读
0 评论
0 点赞
2023-05-05
别吃糖(一)
环境VS2022 .NET6 XUnit启用资源管理器。视图-测试资源管理器仓库代码自动属性快捷方式:空白处输入 prop 快速两下 tab - 自动属性 //私有变量 private string _name; private string _name3; public string Name { get set } //自动声明 常用 public string Name2 = "ABC"; //访问限制 只写 public string Name3 { set => _name3 = value; } //只读 public string Name4 = nameof(Name3); //可访问性 public string Name5 { private get set { _name3 = "1"; value += "TTT"; } } //索引器 private byte[] arr = new byte[100]; public byte this[int i] { get set }匿名委托(匿名方法)传统委托写法 public delegate void DoSomething(int a); public delegate string DoSomething2(int a, string b); //定义方法委托 public void DoIt(int a) { Console.WriteLine(a); } //常用于初始化参数 public void Config(DoSomething doMethod, int a) { doMethod(a); } // 常用于配置方法 public string Config(DoSomething2 doMethod) { return doMethod(1,"2"); } //测试 var mc = new AnonDelegate(); //调用定义的方法委托 mc.Config(mc.DoIt, 10); var x = 10; //使用匿名委托 mc.Config(delegate(int a) , 10); //使用lamda表达式 mc.Config(a => Console.WriteLine(a + x), 10); //加强版 //使用匿名委托 mc.Config(delegate(int a, string b) ); //使用lamda表达式 推荐 mc.Config((a, b) => a + b);匿名方法 lambda表达式格式 (参数a,参数b,参数c...)=> { 方法体 } //无参数且只有一行代码简写 ()=> 方法体;匿名类当某个类可能只用一次,用完即销毁,使用匿名类//匿名类型:只能使用一次,仅能在当前的项目中使用 var aPeople = new ; //嵌套匿名类型 var aEmployee = new { JionDate = DateTime.Now, Salary = 8000, aPeople = new }; _testOutputHelper.WriteLine(aEmployee.aPeople.pName);//输出:张三this扩展方法为什么要有扩展方法,就是为了在不修改源码的情况下,为某个类增加新的方法。语法:定义静态类,并添加public的静态方法,第一个参数代表扩展方法的扩展类。它必须放在一个非嵌套、非泛型的静态类中(的静态方法);它至少有一个参数;第一个参数必须附加this关键字;第一个参数不能有任何其他修饰符(out/ref).第一个参数不能是指针类型。注意:1、C#只支持扩展方法,不支持扩展属性、扩展事件等;2、方法名无限制,第一个参数必须带this,表示要扩展的类型;3、扩展方法的命名空间可以使用namespace System,但不推荐;4、定义扩展方法的类必须是静态类;5、扩展方法虽然是public的静态方法,但是生成以后是实例方法,使用时需要先实例化对象,通过对象.方法名进行调用扩展方法 public static class ByteExtension { public static string ToX2(this SampleClass my ,byte value) { return value.ToString("X2"); } }Assert判断
2023年05月05日
19 阅读
1 评论
0 点赞
2023-05-04
多线程基础
暂无简介
2023年05月04日
25 阅读
0 评论
0 点赞
2023-04-24
\r与\n的区别
\r是回车,英文是Carriage return,作用:使光标到行首\n是换行,英文是New line/line feed,作用:使光标下移一行如果用过机械打字机,就知道回车和换行的区别了。回车就是把水平位置复位,不卷动滚筒。换行就是把滚筒卷一格,不改变水平位置。我们平时所说的键盘Enter键换行实则应该叫做叫做回车换行(\r\n)看到一种说法: windows下enter是 \r\n; linux/unix下是\n; mac下是\rWindows 采用 \r\n 是有原因的,Windows 采用了传统的英文打字机的模式。想想看英文打字机是如何换行的呢?英文打字机是选择将小车退回至起点,这个过程称为回车(carriage return, CR),随后把小车调至下一行的位置,这个过程称为换行(line feed, LF),这样就完成了英文打字机中换行过程。回车(CR)在计算机中使用 ASCII 为 13 的字符来表示(0x0D),换行(LF)使用 ASCII 为 10 的字符来表示(0x0A)。注意:1、windows下可直接使用\n来匹配换行符,但仍然推荐使用标准的\r\n来匹配键盘Enter键的换行符;2、使用\r\n组合是有顺序的,调转顺序写成\n\r是错误的,将无法匹配换行符!
2023年04月24日
25 阅读
2 评论
0 点赞
2023-04-15
Openwrt/Linux 启用Https,申请Lets Encrypt证书
背景HTTPS协议使用非对称加密的方式对数据进行加密,可以让数据传输变得更加安全可靠。而将HTTP协议切换成HTTPS协议,只需要增加SSL证书即可。本文使用ACME工具来生成SSL证书,并将SSL证书部署应用于WEB服务,从而实现支持HTTPS协议的WEB服务。ACMEACME主要有以下几个功能向Let’s Encrypt申请证书支持包括阿里云在内的多个平台,通过多种接口为域名增加TXT解析将证书部署于web服务自动更新证书前提配置1.方法1 以Cloudfare为例,获取自身的Global API Key。 2.方法2 添加管理云解析(DNS)的权限,生成API Token安装ACME只需要一行命令就可以安装ACME$ curl https://get.acme.sh | sh或者$ wget -O - https://get.acme.sh | sh安装一共包括下面几个步骤将acme.sh脚本复制到~/.acme.sh路径下在当前用户的SHELL环境配置文件中增加acme.sh=~/.acme.sh/acme.sh添加一项crontab定时任务并运行下面的命令添加相应环境变量cd ~/.acme.sh export CF_Email="example.com" export CF_Key="GLOBAL API KEY"申请证书注册 email ,更换成自己的邮箱./acme.sh --register-account -m admin@example.com继续输入下面的命令来生成证书,记得把example.com改成自己的域名./acme.sh --issue --dns dns_cf -d example.com -w /etc/acme正常情况下会提示签名成功,并打印当前的证书如果当前系统用户没有-w参数指定的webroot目录的写入权限,将导致acme.sh无法创建域名验证文件。自动部署自动把证书部署于WEB服务Httpd~/.acme.sh/acme.sh --installcert -d example.com \ --keypath /etc/uhttpd.key \ --fullchainpath /etc/uhttpd.crt \ --reloadcmd "/etc/init.d/uhttpd restart"Nginxacme.sh --install-cert -d example.com \ --key-file /path/to/keyfile/in/nginx/key.pem \ --fullchain-file /path/to/fullchain/nginx/cert.pem \ --reloadcmd "service nginx force-reload"自动更新通过crontab -l命令查看证书更新任务计划:其他指令卸载 ./acme.sh --uninstall查看生成的证书 ./acme.sh --list手动更新 ./acme.sh --upgrade其他参考acme.sh简单教程使用ACME部署HTTPS证书
2023年04月15日
302 阅读
2 评论
1 点赞
1
2
3
4
5