Dot-Net
StringComparison 和 StringComparer 之間轉換的優雅方式?
一些 .NET 方法使用StringComparison作為參數,一些使用StringComparer(通常以IComparer的形式)。區別很明顯。是否有一些優雅的方法可以從StringComparer獲取****StringComparison ,反之亦然?
我總是可以編寫使用
Case語句的簡單方法,但也許 .NET 中已經存在一些我忽略的東西。
從
StringComparison到StringComparer很簡單 - 只需創建一個Dictionary<StringComparison, StringComparer>:var map = new Dictionary<StringComparison, StringComparer> { { StringComparison.Ordinal, StringComparer.Ordinal }, // etc };
StringComparer每個值都有一個StringComparison,所以這種方式很容易工作。請注意,StringComparer.CurrentCulture取決於目前的執行緒文化 - 因此,如果您填充字典然後修改執行緒的文化(或從具有不同文化的不同執行緒進行),您最終可能會得到錯誤的值。你可能想要一個Dictionary<StringComparison, Func<StringComparer>>:var map = new Dictionary<StringComparison, Func<StringComparer>> { { StringComparison.Ordinal, () => StringComparer.Ordinal }, // etc };然後,您可以隨時通過呼叫委託來獲取比較器:
var comparer = map[comparison]();走另一條路是不可行的,因為不是每個
StringComparer人都有合適的StringComparison. 例如,假設我(在英國)StringComparer為法語創建一個 (StringComparer.Create(new CultureInfo(..., true))。這StringComparison代表什麼?對於目前的文化、不變的文化或序數比較來說是不正確的。