[Teams][.NET]NLOG的訊息拋到Microsoft Teams

這星期收到許多勸敗Microsoft Teams的分享訊息,Teams也是一種辦公室即時通訊合作軟體,不過以前Teams得要有Office 365才能用,現在有免費的方案了。除了團隊溝通、檔案共用和視訊通話等功能,我們先從應用程式的Log拋到Teams 頻道開始,來串一下NLog To Teams Channel

...繼續閱讀 »

[C#][LINQ]樂透頭獎、雙贏彩及安慰獎的寫生

這週Review年輕同事的程式,程式中需要將兩組序列作比對來決定輸入資料的去向,意外發現了同事使用LINQ All及Any判斷式不小心留下的小bug,簡單作樂透案例給同事看:

  • 判斷序列的"任何項目"是否"都"符合(頭獎)
  • 判斷序列的"任何項目"是否都不符合(雙贏彩)
  • 判斷序列的任一項目是否符合(安慰獎)
...繼續閱讀 »

[.NET][NHibernate]Transaction中讀取不到剛剛寫入的資料

很開心在上周末下班前一起和客戶端的.NET架構師解決了開發人員的NHibernate交易使用問題,好久沒用Hibernate這個老牌ORM武器了,連開保險上膛都很生疏,來筆記Hibernate問題解決,順便回憶。

客戶端開發人員的問題是在同一個Transaction中,有三個資料庫的操作,但後面的操作無法讀取到同一個Transaction先前寫入的資料。

...繼續閱讀 »

[.NET][C#].NET走跳在Linux的人生(二)Mono Runtime

上一篇我們簡單用mono project網站所提供的範例,在Linux新增helloworld.cs程式碼並且編譯然後執行,上一篇可以確保mono runtime以及編譯器都有安裝正確,接下來這篇則是計畫直接把Windows環境編譯好的exe及dll(msil:byte code)放到Linux環境下執行,可以發現透過Mono CLR(Microsoft-Compatible APIs),我們可以不用重新編譯就執行.NET的執行檔。 

...繼續閱讀 »

[.NET][C#]物件建立之淺層複製(Shallow Copy) vs 深層複製(Deep Copy)

最近踩到一個legacy code 在C#物件複製的陳年小雷,拆解炸彈的同時也寫筆記! 

有時我們會在類別(class)中加入Object.MemberwiseClone方法來提供物件的複製(clone),舊程式使用新物件裡的屬性剛好都是用new關鍵字建立,大概像下面的方式使用屬性:  

p2.IdInfo = new IdInfo(17);

很幸運一直沒發生參考問題,最近改用直接指派,類似下面的寫法:  

p2.IdInfo.IdNumber = 17;

測試時大驚!原始物件p1的值竟然被覆蓋了,花了時間才發現自己對MemberwiseClone的定義不夠清楚。

 

...繼續閱讀 »