Daizc
count.articles52
count.tags25
count.categories3
[Csharp]Class与RecordStruct

[Csharp]Class与RecordStruct

[Csharp]Task相关

[Csharp]Task相关

[Csharp]WPF集成Sqlite与数据库加解密

[Csharp]WPF集成Sqlite与数据库加解密

一句话总结

关于依赖安装
抽象层选用Entity Framework Core,只能安装3.x.x版本的。
因为.NETFramework是传统框架,只支持到3版本,不然就只能装大版本为6的Entity Framework(EF6),但是由于EF6已经不积极维护了,综合考虑还是更建议装EFC3

关于数据库加密
SQLite原版没有实现数据库加密,要加密就只能选用其他的SqLite发行版,他们的加密方式各异,用谁创建的数据库就得用谁读写。
推荐SQLiteStudio工具,可以选择很多加解密方式。

关于WPF集成SqLite加密
巨硬官方已经出了例子了.

1
2
3
dotnet remove package Microsoft.Data.Sqlite    # 这是个集成包,删掉
dotnet add package Microsoft.Data.Sqlite.Core # 这才是微软对Sqlite的封装核心
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher # 这个真正想使用的Sqlite发行版的bundle包

修改ConnectString即可

1
2
3
4
5
6
7
# 记得别直接字符串拼,到时候被人注入了
SqliteConnectionStringBuilder sqliteConnectionStringBuilder = new SqliteConnectionStringBuilder {
Password = "xxxxxxxxxx",
Mode = SqliteOpenMode.ReadWriteCreate,
DataSource = "xxxxxxx.db"
};
var connectString = sqliteConnectionStringBuilder.ToString();
[Csharp]可为空的类型

[Csharp]可为空的类型

[Csharp]可为空的类型

一句话总结

值类型的不能?操作符的是通过Nullable<T>包装实现的,而引用类型由于本来就可以为空,所以?操作符只是个供编译器推断的标识而已。

[Csharp]循环链表封装

[Csharp]循环链表封装

[Csharp]循环链表封装

要求

  • 需要具有线程安全特性
  • 可以直接找出上一个、当前值和下一个值

思路

一开始是打算直接拿LinkedList改改的,打算直接把LinkedListNode首尾连起来,然后直接用就是了。
但随即发现一个问题:要是谁谁谁不小心for了一下这list,那还得了?而且线程安全也没法保证啊。
设计一个CreateCircularList,通过CreateCircularIterator方法生产一个Iterator,再去迭代这个Iterator就没问题了。
但随后也发现一个问题,这不够通用,我必须new一个CreateCircularList