.Net

ASPNETCORE_ENVIRONMENT
預設為 Production

launchSettings 為本地開發設定

DOTNET_CLI_UI_LANGUAGE
控制CLI語言

C# 標準

C#6

try catch when

?.

$"{str}"

nameof

SignalR

驗證

Middleware

Attribute

() => {}

using static

INotifyPropertyChanged
PropertyChangedEventHandler
PropertyChangedEventArgs
event
event += (obj,args)=>{}

Dictionary init by { {key,value} } or { [key] = value }

C#7

out var

元組

(a,b) tuple = (c,d)

var tuple = (a,b)

類似 C++ 帶 var point 給 func 後取得回傳結果的用法

棄元

(_, b)

模式

switch(i){
case 1:break;
case int a: break;
case int b when b >0: break;
case null: break;
}

本地方法

void f1(){
return f2();
int f2() => 1;
}

default

int i = default

100_000

func( a:1 , b:2 )

private protected

where T:Enum

where T: unmanaged

ValueTask

await foreach(var i in valueTask)

C#8

interface 可以實作方法

switch 簡寫

switch(enum){
enum.One => 1,
enum.Two => 2
...
_ => throw new Exception(...)
}

variable switch {
{ var1 : "test" } => "hello test",
{ var1 : "123" } => "hello 123"
}

靜態本地函數

位置模式

異步流

C#2

partial class

generic

static class

IEnumerable

Anonymous function (delegate)

get, set in define

nullable (int? i)

??

C#3

LinQ

class, list initor

Anonymous Object

var

Lambda () => {}

auto define for get set

public static void PrintPlusOne(this int x)
int foo;
foo.PrintPlusOne();

partial function

C#4

dynamic (dynamic i = 1;)

編譯器不檢查類型

call parameter by name

OpenFile(bufferSize: 4096, path: "foo.txt");

COM 組件互動

IComparer<in T>
IEnumerable<out T>

TODO

C#5

async / await

C#9

啟動時支持 container 與 local 互相註冊服務

container up 寫 container id : ports 列表
寫到 redis
子服務啟動後讀檔
發送通知

問題

container 與 local 網段不一樣,需要有 mapping 機制

如果同時啟動時,有機率會同時去抓 redis key 而互相抓不到 host

需要

Task

Task 類似 js 的 eventloop,不產生新執行緒

Task.Run 產生新執行緒
適用於密集運算的場景

TaskScheduler

指定 url

CreateHostBuilder: CreateDefaultBuilder. ConfigureWebHostDefaults 載入

秘密管理員

VSCode
${cwd}/Properties/launchSettings.json
.vscode/launch.json

dotnet run --urls "http://[::1]:0;https://[::1]:0"
隨機 port

dotnet Web.dll --urls {url}

預設聽 httq://localhost:5000 及 httqs://localhost:5001 (前題是需先設好 SSL 憑證)

ASPNETCORE_URLS=http://+:80

appSettings.json
Kestrel: EndPoints: Http: Url:"http://+:80"

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
      .UseStartup<Startup>()
      .UseUrls("http://localhost:5123");