创建 Console App
创建文件夹 DockerHello ,在 term 执行命令
1 | dotnet new console |
容器化 .Net Core 程序
第一个 Dockerfile
创建没有后缀的的 Dockerfile
1 | FROM microsoft/dotnet:2.1-sdk |
创建文件夹 DockerHello ,在 term 执行命令
1 | dotnet new console |
创建没有后缀的的 Dockerfile
1 | FROM microsoft/dotnet:2.1-sdk |
C#.NET 利用ToDictionary(),GroupBy(),可以将List转化为Dictionary,主需要一行代码!
首先看一下需求,已知cars,等于:
1 | List<Car> cars = new List<Car>(){ |
1)我想以id为键,值为Car转化为一个字典idCarDict,方法如下:
var idCarDict = cars.ToDictionary(car=>car.id);
这样保证能正确转化的前提为,id在列表中没有重复值。如果有重复的,会抛出向字典中添加重复值的异常。
2)我想以type为键,值car的List的typeDict,方法如下:
Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type).ToDictionary(r => r.Key, r => r.ToList());
分步解释:
第一步分组
cars.GroupBy(car=>car.type) //返回的结果类型为: //IEnumerable<IGroup<string,car>>;
//其中string等于car.type,也就是分组的键
第二步将IEnumerable类型转化为字典,选取合适的键,
ToDictionary(r=>r.Key,r=>r.ToList());
//r参数代表分组对象,r.Key便是car.type;
//r.ToList()操作后将分组对象转化为List对象
这种转化代码简介,比以下foreach遍历得到以car.type的字典简洁许多:
1 | var dict = new Dictionary<string,List<Car>>(); |
转的文章,希望自己能记住todictionary 的使用方法
链接
记录下见过的error,
产品环境的代码不一样但是和这个运行的结果是一样的
ConvertTimeToUtc
1 | var tz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); |
解决方式是 直接用了 new data(); 不适用utcnow
在编码中没有注意Dictionary 是非线程安全的,以及对当前的注入的实例化的注入方式没有关注。结果在实现一个逻辑的时候在类中定义了一个 private 的 Dictionary ,结果导致有几率会导致当前县城 hang 住,我不确定为什么会导致方法 hang 住,而不是抛异常,这个问题是同事分析 dump 文件之后返回来的。所以对这个问题的根本原因还没有找到,google 了Dictionary 线程不安全的现象,也没有找到具体有人说过。自己写了test的代码,现象也是会抛异常而不是卡住。所以这个算是一个没有找到原因的现象。
无论是不是Dictionary 导致的hang, 这个地方的Dictionary会有线程安全问题是铁定的了。所以这个地方需要修正,能想到的方案有两个
但是领导说让使用 ConcurrentDictionary,这就牵扯出来ConcurrentDictionary 的使用的问题。
最近想看看ABP的代码,所以下载了一份代码,然后按照官方的的流程很容易就启动起来了。然后就回家折腾一下,结果回家就没那么轻松了,家里电脑有两台,分别是mac 和win10,对mac不是很熟悉,所以优先弄了下win10上的。
但是在win10中,在Package manager console 中运行update-database的时候会出现错误,错误内容是
1 | It was not possible to find any compatible framework version |
同样的代码,在公司只有一个警告,说的也是这块版本不太匹配,但是在家直接失败,这样会导致数据库初始化失败。但是没有研究,竟然不通,就先去mac上下载了代码,安装 mariadb,这里需要提到一点,想让maradb可以远程访问需要设置密码,在apply的时候注意填写密码,否则无法在其他机器上访问这个db。
记录下本次最在意的一点,.net core 的 ef 再mac上可以使用 dotnet 命令来进行数据库的初始化操作。具体使用command的 链接
具体命令:
1 | dotnet ef database update |
这命令也可以在win10 中运行,并且没有错误提示。完美绕过了 pcm的错误。
还是不会写文章,只是记录下自己经历中印象略深的。