.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");