我做了快速测试应用程序,将LINQ排序与我的自定义对象上的Array.Sort进行比较.Array.Sort似乎非常慢!
我创建了这样的自定义类:
class Person : IComparable<Person>
{
public int Age { get; set; }
public string Name { get; set; }
public int CompareTo(Person obj)
{
return this.Age.CompareTo(obj.Age);
}
public Person()
{ }
}
Run Code Online (Sandbox Code Playgroud)
然后我在main()中做了我的测试人员:
string name = "Mr. Tomek";
Random r = new Random();
int size = 10000000;
DateTime start, end;
Person[] people1 = new Person[size];
Person[] people2 = new Person[size];
for (int i = 0; i < size; i++)
{
people1[i] = new Person();
people1[i].Age = r.Next(0, 10000); …Run Code Online (Sandbox Code Playgroud) 我在 Windows 10 上安装了 docker Desktop。然后我发现了 WSL。写完命令后,wsl -l -v我看到我有 2 个发行版:
docker-desktop-data
docker-desktop
Run Code Online (Sandbox Code Playgroud)
我还从 Microsoft Store 安装了 Ubuntu 20.04,现在我也有了
Ubuntu-20.04
Run Code Online (Sandbox Code Playgroud)
现在我想摆脱这两个。我不需要那么多。我知道 docker-desktop-data 包含图像 docker-desktop 包含 docker 基础设施。但对我来说仍然不清楚并且令人困惑。我只想将 Ubuntu-20.04 用于我的 docker 实验。
我该如何删除这些?
我很难理解为什么网络上有这么多示例在解释 CQRS 模式、处理命令和查询时都使用 MediatR。
几乎在所有地方,我都看到由 MediatR 处理命令和查询的示例,但除了不需要在依赖注入容器中注册每个命令或查询之外,我没有看到它有任何好处。但随后您需要实现查询对象(继承 IRequest)、查询处理程序和查询响应对象,以便您可以在 API 控制器方法中调用_mediatr.Send(queryObject).
为什么不直接使用依赖注入将查询对象注入到 API 控制器中,您可以直接在其上调用“get”方法?喜欢:
[HttpGet]
[Route("getall")]
public async Task<IncidentQueryResult> GetAll(int page = 0, int pageSize = 25)
{
var result = await _incidentQueries.GetIncidents(page, pageSize);
return result;
}
Run Code Online (Sandbox Code Playgroud)
代替:
[HttpGet]
[Route("getall")]
public async Task<IncidentQueryResult> GetAll(int page = 0, int pageSize = 25)
{
var query = new IncidentQuery(page, pageSize);
var result = await _mediatr.Send(query);
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后,在该GetIncidents方法内部,对数据库进行直接 sql 调用,并将结果映射到 C# 对象。干净利落。
对我来说,MediatR 库的完美且唯一合理的使用是处理领域事件。 在实现 DDD 时,我尝试按照下面介绍的方式建立一个项目。每个矩形都是解决方案中的一个不同项目。箭头代表参考:
让我们想象一个场景:创建一个域对象需要增加存储在另一个域对象(不同的聚合)中的计数器 …
我尝试protected override void OnModelCreating(ModelBuilder builder)在我的 IdentityDataContext 类中使用并创建一个迁移来播种这些数据:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
const string ADMIN_ID = "b4280b6a-0613-4cbd-a9e6-f1701e926e73";
const string ROLE_ID = ADMIN_ID;
builder.Entity<IdentityRole>().HasData(new IdentityRole
{
Id = ROLE_ID,
Name = "admin",
NormalizedName = "ADMIN"
});
builder.Entity<MyIdentityUser>().HasData(new MyIdentityUser
{
Id = ADMIN_ID,
UserName = "myemail@myemail.com", …Run Code Online (Sandbox Code Playgroud) SO上也有类似的问题,但没有一个回答我的问题。
我想要一个二维词典来翻译。像这样的东西:
Dictionary["DE"][TranslationKeys.Title] = "Title in German";
Dictionary["DE"][TranslationKeys.SubTitle] = "Subtitle in German";
Dictionary["PL"][TranslationKeys.Title] = "Title in Polish";
Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
Dictionary["EN"][TranslationKeys.Title] = "Title in English";
Dictionary["EN"][TranslationKeys.SubTitle] = "Subtitle in English";
Run Code Online (Sandbox Code Playgroud)
如果我使用传统字典就好了Dictionary<string,Dictionary<TranslationKeys,string>>
但我不想以这样的“丑陋”方式初始化它:
Dictionary = new Dictionary<string,Dictionary<TranslationKeys,string>>(){
{"PL",new Dictionary<TranslationKeys,string>(){{TranslationKeys.SubTitle,"Subtitle in Polish"}}}
};
Run Code Online (Sandbox Code Playgroud)
但像这样:
Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
Run Code Online (Sandbox Code Playgroud)
所以我尝试实现一个“智能”多维字典,如果他得到了值,它就会自行计算出来。到目前为止我所做的是一个使用 Dictionary 和特殊索引器的新通用类:
public class TranslateDictionary<TKey, TValue> where TValue : new()
{
private Dictionary<TKey, TValue> Dictionary;
public TValue this[TKey lang]
{
get
{
if (!Dictionary.ContainsKey(lang))
{
TValue obj …Run Code Online (Sandbox Code Playgroud) 我需要从浏览器的语言中获取文化字符串。
我考虑过从javascript这样获取代码:
var userLang = navigator.language || navigator.userLanguage;
Run Code Online (Sandbox Code Playgroud)
但这只给了我从.NET获得的文化信息的第一部分:
Thread.CurrentThread.CurrentCulture.Name;
Run Code Online (Sandbox Code Playgroud)
因此,javascript为我提供了“ de”或“ pl”,而不是.NET中的“ de-DE”或“ pl-PL”。有没有办法获取“完整信息”?
为什么 10**5 等于 1e5 而 10**50 不等于 Python 中的 1e50?
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 10**5 == 1e5
True
>>> 10**50 == 1e50
False
Run Code Online (Sandbox Code Playgroud)
直到 10**22 都是如此。那么它是假的:
>>> 10**22 == 1e22
True
>>> 10**23 == 1e23
False
Run Code Online (Sandbox Code Playgroud) 我想要做什么:将 docker-compose 解决方案从 Github 部署到我安装了 docker 和 docker-compose 的虚拟专用服务器。
我看到有 Github Actions 允许我在推送到 master 后通过 SSH 复制文件,但我不知道docker-compose up在复制源后如何在我的服务器上运行。
在我的 VPS 上,我安装了 Ubuntu 18.4。
c# ×5
.net ×1
arrays ×1
asp.net ×1
asp.net-core ×1
cqrs ×1
culture ×1
cultureinfo ×1
deployment ×1
dictionary ×1
docker ×1
github ×1
javascript ×1
linq ×1
mediatr ×1
python ×1
roles ×1
sorting ×1
ssh ×1
vps ×1