官方文件上有提到,要確保回傳資料集排序一定要下 Order By
星期四, 4月 29, 2021
[SQL] Order By 排序
系統升級後接到使用者回報,單據資料排序亂掉導致搜尋困難,原本是 ABCD,但卻變成 ADCB,查 AP 發現撈資料時並沒有下 Order By,導致回傳的資料排序不如預期
星期二, 4月 20, 2021
星期三, 4月 14, 2021
[C#] .NET Framework 預設 C# 版本
build .NET Freamework 專案時發現在 debug mode 不會出現的錯誤,在 release mode 都會跑出來,好在錯誤訊息明確,快速就定位
檢查該 Project 內的 C# 版本發現,原來 debug mode 被修正為 lastest,而 release mode 還是維持在預設的 7.3,Orz
錯誤 CS8370 在 C# 7.3 中無法使用 '目標型別條件運算式' 功能。請使用語言版本 9.0 或更高的版本。
星期一, 4月 05, 2021
[C#] IEquatable<T>
搞清楚 IEquatable<T> 觀念和使用
手動建立的 User Class 只包含兩個 Property
勾選 [IEquatable<User>] 選項
產生完整的 User Class Code
VS 快捷鍵可以快速 override Equals 和 GetHashCode Method
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在 class 上使用 Alt + Enter 就可以看見快捷功能,選擇 [產生 Equals 與 GetHashCode]勾選 [IEquatable<User>] 選項
產生完整的 User Class Code
public class User : IEquatable<User>
{
public string FirstName { get; set; }
public string LastName { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as User);
}
public bool Equals(User other)
{
return other != null &&
FirstName == other.FirstName &&
LastName == other.LastName;
}
public override int GetHashCode()
{
// VS 自動產生
int hashCode = 1938039292;
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(FirstName);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(LastName);
return hashCode;
// 查資料時發現,下列寫法比較常見
return FirstName.GetHashCode() ^ LastName.GetHashCode();
}
}
Demo 範例
using System;
namespace IEquatableSample
{
class Program
{
static void Main(string[] args)
{
User UserA = new User
{
LastName = "姓",
FirstName = "名"
};
User UserB = new User
{
LastName = "姓",
FirstName = "名"
};
Console.WriteLine($"UserA == UserB:{UserA == UserB}");
Console.WriteLine($"UserA.Equals(UserB):{UserA.Equals(UserB)}");
}
}
}
結果