發表文章

C# Func用法

C# Func用法 在 C# 中, Func 是一個委託類型,用於表示具有返回值的方法。 Func 委託可以有零個或多個輸入參數,但必須有一個返回值。這使得 Func 非常適合用來封裝那些需要計算並返回結果的方法。 基本語法 Func 委託的定義如下: Func<in T1, in T2, ..., out TResult> T1, T2, ... 是輸入參數的類型。 TResult 是返回值的類型。 示例 以下是一些 Func 的常見用法示例: 1.沒有參數,返回一個值 Func<int> getRandomNumber = () => new Random().Next(1, 100); int number = getRandomNumber(); Console.WriteLine(number); 這個例子中, getRandomNumber 是一個沒有輸入參數但返回一個隨機數的 Func<int> 委託。 2.一個參數,返回一個值 Func<int, int> square = x => x * x; int result = square(5); Console.WriteLine(result); // Output: 25 3.多個參數,返回一個值 Func<int, int, int> add = (a, b) => a + b; int sum = add(3, 4); Console.WriteLine(sum); // Output: 7 在這個例子中, add 是一個接受兩個整數並返回它們和的 Func<int, int, int> 。 Func 的優點 簡潔 :使用 Func 可以減少冗長的代碼,特別是在使用匿名方法或 Lambda 表達式時。 靈活 :可以將方法作為參數傳遞給其他方法,這在 LINQ 查詢中非常常見。 與 Action 的比較 Func 與 Action 類似,但 Action 沒有返回值。 Func 總是有返回值,因此如果你需要一個不返回值的委託,應該使用 Action 。 綜合應用 例如,在 LINQ 查詢中,你經常會看到 Func 被用來...

利用LINQ將List依指定項目數量切割為多筆

利用LINQ將List依指定項目數量切割為多筆 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // 假設這是原始的 List<string> List<string> originalList = Enumerable.Range(1, 35).Select(i => $"Item{i}").ToList(); // 使用 LINQ 分割成多個組 List<List<string>> groups = originalList .Select((item, index) => new { item, index }) .GroupBy(x => x.index / 10) .Select(g => g.Select(x => x.item).ToList()) .ToList(); // 輸出結果 for (int i = 0; i < groups.Count; i++) { Console.WriteLine($"Group {i + 1}:"); foreach (var item in groups[i]) { Console.WriteLine(item); } Console.WriteLine(); } } } 程式碼說明: 建立原始的 List<string> 使用 Enumerable.Range(1, 35) 生成一個從 1 到 35 的整數序列,並使用 Select 方法將其轉換為 List<string> 。 分組...

bootstrap 3 container

container 有預設寬度 container-fluid 固定100%寬度 .container .container 类创建一个固定宽度的容器,并且根据不同的屏幕尺寸(或视口宽度)有不同的固定最大宽度。它在每一侧都有自动的左右边距,以确保内容居中。 以下是不同屏幕尺寸下 .container 的最大宽度: 超小屏幕(小于768px):宽度为 auto(流体布局) 小屏幕(≥768px):最大宽度为 750px 中屏幕(≥992px):最大宽度为 970px 大屏幕(≥1200px):最大宽度为 1170px .container-fluid .container-fluid 类创建一个宽度始终为 100% 的容器,不管屏幕的宽度是多少,它都会占满整个视口的宽度。

正則表達式 Regular Expression

正則表達式(Regular Expression,簡稱 regex 或 regexp)是一種強大且靈活的文字處理工具,用於匹配和操作文字。它們通常用於搜索、替換和驗證文字。以下是正則表達式的基本概念和一些常見的用法說明: 基本概念 字面字符(Literal Characters) :匹配文本中的字符本身。 例如,正則表達式 abc 會匹配字串 "abc"。 元字符(Metacharacters) :具有特殊含義的字符。 常見的元字符包括 . 、 ^ 、 $ 、 * 、 + 、 ? 、 {} 、 [] 、 | 、 () 。 字符類(Character Classes) :用方括號 [] 包圍的一組字符,表示其中的任意一個字符。 例如, [abc] 匹配 "a"、"b" 或 "c"。 預定義字符類(Predefined Character Classes) : \d :匹配任何數字,等同於 [0-9] 。 \D :匹配任何非數字字符。 \w :匹配任何字母、數字或底線,等同於 [a-zA-Z0-9_] 。 \W :匹配任何非單詞字符。 \s :匹配任何空白字符(空格、製表符、換行符等)。 \S :匹配任何非空白字符。 量詞(Quantifiers) :指定前面的元素出現的次數。 * :匹配前面的元素零次或多次。 + :匹配前面的元素一次或多次。 ? :匹配前面的元素零次或一次。 {n} :匹配前面的元素恰好 n 次。 {n,} :匹配前面的元素至少 n 次。 {n,m} :匹配前面的元素至少 n 次且至多 m 次。 邊界匹配(Anchors) :用於匹配字串的開始和結束。 ^ :匹配字串的開始。 $ :匹配字串的結束。 分組和捕獲(Grouping and Capturing) :用圓括號 () 將字符組合在一起。 例如, (abc)+ 匹配 "abc"、"abcabc"、"abcabcabc" 等。 替代(Alternation) :使用管道符號 | 來表示 "或"。 例如, abc|...

DIV 內的元件水平垂直置中CSS

          display: flex;         justify-content: center; /* 水平置中 */         align-items: center; /* 垂直置中 */

C# 時間函數 DateTime.Compare(datetime1, datetime2)用法

C# 時間函數 DateTime.Compare(datetime1, datetime2)用法 using System; class Program { static void Main() { DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); // 8月1日午夜 DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0); // 同一天的中午 int result = DateTime.Compare(date1, date2); string relationship; if (result < 0) relationship = "is earlier than"; //date1 < date2 else if (result == 0) relationship = "is the same time as"; //date1 == date2 else relationship = "is later than"; //date1 > date2 Console.WriteLine("{0} {1} {2}", date1, relationship, date2); } }  

Visual Studio 開啟方法內嵌參數提示

圖片
 Visual Studio 開啟方法內嵌參數提示

使用 FontAwesome Icon

圖片
使用 FontAwesome Icon 下載檔案: https://fontawesome.com/download 在網頁上引用icon js (依下戴檔案解壓縮後存放路徑修改) <script src="~/Content/fontawesome-free-6.4.2-web/js/all.min.js"></script> <link rel="stylesheet" href="~/Content/fontawesome-free-6.4.2-web/css/all.min.css"> 在官方網站尋找要的ICON, 網址: https://fontawesome.com/search 把class貼到HTML按鈕class上 <button type='button' class=btn btn-success' id='btn_AAA'>   <span style='margin-right:5px; font-size:24px;' class="fa-solid fa-user"></span>   some text </button> 打完收工!!

好用的前端資料清單顯示 JQuery datatables 套件

好用的前端資料清單顯示 JQuery datatables 套件 官網: https://datatables.net/ 套件引用 <script src="https://code.jquery.com/jquery-3.7.1.js"></script> <script src="https://cdn.datatables.net/2.0.3/js/dataTables.js"></script> <link rel="stylesheet" href="https://cdn.datatables.net/2.0.3/css/dataTables.dataTables.css" /> HTML範例資料 <table id="example" class="display" style="width:100%"> <thead> <tr> <th>Name</th> <th>Position</th> <th>Office</th> <th>Age</th> <th>Start date</th> <th>Salary</th> </tr> </thead> <tbody> <tr> <td>Tiger Nixon</td> <td>System Architect</td> ...

好用的sweetalert2 (前端Javascript訊息彈跳視窗)

圖片
好用的sweetalert2 (前端Javascript訊息彈跳視窗) 官方網頁: sweetalert2 美化原來Javascript [alert]視窗, 沒辦法取代alert可以暫時停住程式執行的特性, 但是支援執行對應按鈕後個別執行不同程式邏輯。 另外, 它不支援IE sweetalert2共有4個按鈕可用, 分別為 OK Button (confirm button) NO Button (deny button) Cancel Button Close Button (右上X按鈕) JS及CSS引用 <script src="https://code.jquery.com/jquery-3.7.1.js"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11.10.7/dist/sweetalert2.all.min.js"></script> <link href="https://cdn.jsdelivr.net/npm/sweetalert2@11.10.7/dist/sweetalert2.min.css" rel="stylesheet"> sweetalert2 JS Code Swal.fire({ title: "這是[title]", text: "這是內文[text]", icon: "warning", //success(綠色打勾), error(紅色打叉), warning(黃色金探號), info(藍色i), question(灰色問號) showConfirmButton: true, //OK Button, 預設顯示 showDenyButton: true, //NO Button, 預設隱藏 showCancelButton: true, //Cancel Button, 預設隱藏 showCloseButton: true, //右上X Button, 預設隱藏 conf...

Oracle 修改Sequence的數值

Oracle 修改Sequence的數值 假設目前有一個Sequence名為[seq_test], 修改數值的方法有下列2種, 方法1 : drop後重建, 並指定起始值 DROP SEQUENCE seq_test; CREATE SEQUENCE seq_test START WITH 100; 方法2 : 修改增加值的區間, 取號後, 再改回來原本的區間 --修改為1000 ALTER SEQUENCE seq_test INCREMENT BY 1000; --取下一個值 SELECT seq_test.NextVal FROM dual; --修改回1 ALTER SEQUENCE seq_test INCREMENT BY 1;  

利用Javascript把數字進行小數位數補零

利用Javascript把數字進行小數位數補零 利用 Number.toFixed() 是 JavaScript 中用於將數字格式化為指定小數位數的方法。它接受一個參數,即要保留的小數位數,並返回一個代表該數字的字符串,帶有指定的小數位數。 const number = 1.23456; const result = number.toFixed(2); console.log(result); // 會輸出 "1.23" 在這個例子中, toFixed(2) 將 1.23456 格式化為帶有兩位小數的字符串 "1.23" 。(直接去除後面位數, 不是四捨五入) 如果指定的小數位數比原始數字的小數位數多,則會在數字後面補零。如果指定的小數位數比原始數字的小數位數少,則會進行四捨五入。 下面這個例子是寫成一個function, 可以重覆利用 function padZero(number, decimalPlaces) { // 確保 number 是數字 if (typeof number !== 'number') { return '第一個參數必須是數字'; } // 確保 decimalPlaces 是正整數 if (!Number.isInteger(decimalPlaces) || decimalPlaces < 0) { return '第二個參數必須是非負整數'; } // 轉換為帶有固定小數位數的字符串 const result = number.toFixed(decimalPlaces); return result; } console.log(padZero(1.1, 3)); // 1.100 console.log(padZero(10, 4)); // 10.0000 網路上找到的另一個補零的寫法, 範例如下, function Pubfunc_DecimalLength(Number, Length) { let nums = (Number || 0).toStrin...

MSSQL, 查詢的欄位不存在索引和索引的[包含的資料行], 兩者把欄位加入的差別

MSSQL, 查詢的欄位不存在索引和索引的[包含的資料行], 兩者把欄位加入的差別 對於非聚集索引而言,如果查詢的結果欄位不在索引中,可以考慮兩種方式來提升查詢效率:將欄位加入索引和將欄位加入索引的「包含的資料行」。這兩種方法有不同的影響: 將欄位加入索引 : 當你將欄位加入索引時,這些欄位會成為索引的一部分,這意味著 SQL Server 在查詢時可以使用這些欄位來進行索引掃描和查詢結果的篩選。 這種方式適用於需要在查詢條件中使用這些欄位進行篩選和排序的情況,例如 WHERE 條件中使用了這些欄位。 添加欄位到索引中可能會增加索引的大小和維護成本,因此需要權衡索引效能和成本之間的關係。 將欄位加入索引的「包含的資料行」 : 在建立索引時,可以使用「包含的資料行」來將非索引鍵的欄位包含在索引中,但不是索引的排序鍵。這些欄位只是附加到索引頁面中,不會用於索引的排序或搜索。 使用「包含的資料行」適用於那些不需要用於索引搜索但在查詢中仍然需要的欄位,例如 SELECT 列表中的欄位。 這種方式不會對索引的搜索和排序行為產生直接影響,但可以提高查詢效率,特別是當這些欄位被頻繁地使用於查詢結果的檢索時。 總之,將欄位加入索引和加入索引的「包含的資料行」都可以提高查詢效率,但它們的適用場景和影響不同。通常來說,如果欄位需要用於索引的搜索和排序,則將其加入索引;如果欄位只是需要在查詢結果中使用,則將其作為「包含的資料行」加入索引可能更合適。  

Microsoft SQL Server 中,資料儲存與索引儲存的說明

Microsoft SQL Server 中,資料儲存與索引儲存的說明 資料頁面(Data Pages) : 資料頁面是用來存儲資料表中實際資料的地方。 每個資料頁面的大小通常是 8KB。 資料頁面以頁的形式存儲在資料檔案(Data Files)中,每個資料檔案可以包含多個資料頁面。 資料頁面中的資料按照資料表的結構進行組織和存儲。每列資料都以固定長度或變動長度的格式存儲在資料頁面上。 索引頁面(Index Pages) : 索引頁面是用來存儲索引數據的地方。索引可以是聚集索引或非聚集索引。 每個索引頁面的大小也通常是 8KB。 索引頁面包含索引鍵和指向資料頁面或下一級索引頁面的指標。 聚集索引的索引頁面與資料頁面結構相似,因為聚集索引的結構與資料表的結構相同,所以索引頁面包含資料本身。 非聚集索引的索引頁面僅包含索引鍵和指向資料頁面或下一級索引頁面的指標,而不包含實際資料。 這些頁面的組織和管理是 SQL Server 效能和資料存取的關鍵部分。資料頁面和索引頁面的分配、讀取、寫入和維護受到 SQL Server 引擎的管理和優化,以確保高效率和可靠性。理解這些頁面的結構和運作方式對於設計和管理資料庫是非常重要的。 當查詢結果的資料跨越多個不連續的索引頁面且取得的欄位並不在索引鍵中時,非聚集索引的工作方式如下 索引掃描 : SQL Server 首先根據查詢條件使用索引來定位符合條件的記錄。這可能涉及到索引的搜索和篩選。 如果查詢的條件無法利用索引進行快速定位,則可能會採用索引的全掃描,也就是對整個索引進行遍歷,以找出符合條件的資料。 資料檢索 : 當索引定位到符合查詢條件的資料頁面時,SQL Server 需要讀取這些頁面上的資料行以滿足查詢需求。 如果資料行不在索引中,SQL Server 必須通過資料頁面的指標找到對應的資料頁面,然後從中讀取所需的資料行。 由於資料行不在索引中,這可能需要額外的 IO 操作,因為 SQL Server 需要訪問資料檔案中的不同頁面來檢索完整的資料。 資料合併與排序 : 當從不同的資料頁面檢索資料後,SQL Server 需要將這些資料合併並進行排序(如果需要)以生成查詢結果。 這可能涉及到將資料行按照查詢需求進行組合、排序和過濾,以生成...

在 Microsoft SQL Server 中建立索引, 關於「包含的資料行」

在 Microsoft SQL Server 中建立索引, 關於「包含的資料行」 在 Microsoft SQL Server 中,當建立索引時,可以使用「包含的資料行」來增強查詢效能。包含的資料行是索引的一部分,但不會用來定義索引的排序鍵。它們僅包含在索引頁面中,並且不影響索引的排序方式。這些資料行對於包含在查詢的 SELECT 列表中但不是 WHERE 或 JOIN 條件的欄位特別有用。 透過使用包含的資料行,你可以達到以下幾個目的: 覆蓋索引(Covering Index) :當所有查詢需要的資料都可以從索引中獲取時,可以避免查詢需要訪問資料庫表格。這可以減少 IO 成本,提高查詢效能。 減少索引大小 :索引的大小直接影響到查詢效能。通過只包含必要的資料行,可以減小索引的大小,進而提高查詢效能。 減少索引碎片 :如果索引包含了大量不需要的資料行,當進行更新或插入操作時,可能會產生較多的索引碎片。只包含必要的資料行可以減少這種情況的發生。 要使用包含的資料行,可以在建立索引或修改現有索引時,使用 INCLUDE 子句指定要包含的資料行。例如: CREATE NONCLUSTERED INDEX IX_IndexName ON TableName (IndexedColumn) INCLUDE (Column1, Column2, ...); CREATE INDEX IX_IndexName ON TableName (IndexedColumn) INCLUDE (Column1, Column2, ...); 這樣做將指示 SQL Server 在索引中包含指定的資料行,以提高查詢效能。 若多個查詢SQL使用到同一個索引,但其 SELECT 欄位不同,可以考慮將常用的欄位作為「包含的資料行」。這樣做的好處是可以減少查詢所需的 IO 成本,提高查詢效能,尤其是當索引包含了大量不需要的資料行時。 然而,將所有欄位都設定為「包含的資料行」可能不是一個理想的做法。這會增加索引的大小,可能導致性能下降。因此,建議只包含那些經常用於查詢的欄位,以保持索引的精簡且高效。 在決定要包含哪些資料行時,可以考慮以下因素: 查詢的使用情況 :分析常用的查詢,確定哪些欄位是經常被使用的。將這些欄位作為包含的資料行可能會提高查詢效能。 資料行的大小...

網頁載入後, 將自己網頁關閉, 使用Javascript

網頁載入後, 將自己網頁關閉, 使用Javascript HTML+Javascript <script> //window.close(); //會顯示詢問訊息 //利用執行自己, 達到javascript關閉自已(不會顯示詢問訊息)。 window.onload = function () { open('ABC/EmptyAction', '_self').close(); //呼叫空白畫畫, 然後關閉自己 }; </script> Server Side (C#, MVC Action) public ActionResult EmptyAction { return View(); //空白畫面 }    測試使用IE和Edge有效

C# 建立物件的淺層複製(Shallow Clone/Copy)及深層複製(Deep Clone/Copy)

C# 建立物件的淺層複製(Shallow Clone/Copy)及深層複製(Deep Clone/Copy) 在C#中,物件的淺層複製(Shallow Copy)和深層複製(Deep Copy)是兩種不同的複製方式,它們在複製物件時的行為和結果有所不同。 淺層複製(Shallow Copy) 淺層複製是指創建一個新的物件,並將原物件的值類型字段複製到新物件中。然而,當數據是參考類型時,只有參考本身被複製,而不是被參考的物件本身。因此,原物件和複製物件將指向同一個物件。這意味著,如果修改了複製物件中的參考類型字段,原物件中的相同字段也會被修改。 在C#中,可以使用 MemberwiseClone() 方法來實現淺層複製。這個方法會創建一個新的物件,並將原物件的所有字段複製到新物件中。但是,如果字段是參考類型,則只複製參考,而不是參考的物件本身。 public object Shallowcopy() { return this.MemberwiseClone(); } 深層複製(Deep Copy) 深層複製則是創建一個新的物件,並將原物件的所有字段(包括參考類型字段)複製到新物件中。這意味著,即使是參考類型字段,也會創建一個新的物件來替換原物件中的參考。因此,原物件和複製物件之間的參考類型字段是完全獨立的,修改其中一個不會影響另一個。 在C#中,實現深層複製需要手動實現。這通常涉及到創建一個新的物件,並將原物件的所有字段(包括參考類型字段)複製到新物件中,並確保參考類型字段也被複製。 深層複製的寫法有很多種, 方法1: 二進制序列化(Binary Serialization) 複製對象 Class 必需標記 [Serializable] 標籤 [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } public static T DeepClone<T>(this T source) { if (!typeof(T).IsSerializable) { throw new ArgumentException(...

C# Entityframework, mssql, decimal精準度問題

C# Entityframework, mssql, decimal精準度問題 This is because Entity Framework, by default, maps the .NET decimal type to SQL Server's decimal(18,2) data type, which might not match the precision and scale you require for your specific use case. 由於Entity Framework, .Net decimal型別, 預計對應MSSQL decimal型別的精準度為decimal(18, 2), 所以當C#寫入資料包含小數第3位時, 寫入資料庫後會被截掉。 解決方案如下, 使用Fluent API:如果您使用的是Entity Framework 6,您可以在OnModelCreating方法中使用Fluent API來設定資料庫欄位的精確度和小數位數 protected override void OnModelCreating(DbModelBuilder modelBuilder) { //指定所有decimal欄位轉換 modelBuilder.Properties<decimal>().Configure(config => config.HasPrecision(18, 5)); //指定特定欄位轉換 modelBuilder.Entity<YourEntity>().Property(e => e.YourDecimalProperty).HasPrecision(18, 5); } 若為 Entity Framework Core, 也可使用下面2個寫法 (未實際驗證過是否可行) public Class YourEntity { [Column(TypeName = "decimal(18,5)")] public decimal YourDecimalProperty {get; set;} } protected override void OnModelCreating(ModelBuil...

Git commit錯誤, Failed to get unRev file listfatal: unsafe repository

Git commit錯誤, Failed to get unRev file listfatal: unsafe repository 錯誤訊息: Failed to get UnRev file listfatal: unsafe repository ( D./****/****' is owned by someonelse) To add an exception for this directory, call: git config --global --add safe.directoryD:/****/**** Set the enwironment variableGIT TEST DEBUG UNSAFE DIRECTORIES=true and runagain for more information. 可能原因: Git版本更新後, 增加新的資料夾安全限制, 造成進行Git操作找不到git文件 解決方法: 指定資料夾 git config --global --add safe.directory D:/****/**** 全域設定 git config --global --add safe.directory "*"    

C# 使用Get取得網頁執行結果資料(資料格式為JSON) [HttpWebRequest]

C# 使用Get取得網頁執行結果資料(資料格式為JSON) [HttpWebRequest] void Main() { string apiUrl = "http://aaa/bbb/ccc?x=11&y=222"; string Msg = ""; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(apiUrl); req.Method = "GET"; req.ContentType = "application/json"; req.Timeout = 3000000; //以毫秒為單位 using (HttpWebResponse wr = (HttpWebResponse)req.GetResponse()) { if (wr.StatusCode == HttpStatusCode.OK) { using (Stream stream = wr.GetResponseStream()) using (StreamReader reader = new StreamReader(stream)) { Msg = reader.ReadToEnd(); } } } RDataSS RData = JsonConvert.DeserializeObject<RDataSS>(Msg); RData.Dump(); } // Define other methods and classes here public class RDataSS { public string ReturnCode { get; set; } public string Message { get; set; } public string StorageID { get; set; } }