IComparer、IComparable、StringComparison枚举、CultureInfo 的用法
IEnumerable<T> 和 IEnumerator<T>。泛型版本是新式代码的首要选项。
InvariantCulture:程序间、程序数据库、程序网络交互用InvariantCulture
invariant是基于en-US文化,但是与en-US还是有区别的。
例如:不变文化使用国际符号作为货币:"\"与美元符号:"$",用于格式化货币。
然而,在大多数情况下,它们非常相似。
CurrentCulture:程序和用户之间使用CurrentCulture
InvariantCulture
原文:使用不变文化属性|微软文档 (microsoft.com)
文化信息. InvariantCulture属性既不是中性文化,也不是特定文化。它是第三种对文化麻木不仁的文化。它与英语相关联,但与一个国家或地区无关。您可以在系统中几乎任何方法中使用不变文化。需要文化的全球化命名空间。但是,您应该仅针对需要文化独立结果(如系统服务)的流程使用不变文化。在其他情况下,它产生的结果可能是语言不正确或文化上不恰当。
当安全决策将基于字符串比较或案例更改的结果时,您还应使用不变文化。字符串.比较、字符串、托普和字符串等方法的默认实现。如果文化信息。当前文化被更改,或者代码运行的计算机上的文化与开发人员用于测试代码的文化不同,执行文化敏感字符串操作的代码可能会导致安全漏洞。编写字符串操作的开发人员预期的行为将不同于操作运行计算机上的代码的实际行为。为了消除文化差异,确保无论文化信息的价值如何,当前文化,请使用超载的字符串.比较,字符串.ToUpper和字符串.ToLower方法,接受文化信息参数,指定文化信息.文化信息参数的不变文化属性。
有关使用不变文化属性执行文化不敏感字符串操作的更多信息,请参阅"文化-不敏感字符串操作"。
InvariantCulture可用于存储不会直接显示给最终用户的数据。以独立于文化的格式存储数据可保证已知格式不会改变。当来自不同文化文化的用户访问数据时,可以根据用户对数据进行适当的格式化。例如,如果您将DateTime类型存储在文本文件中(为 InvariantCulture格式格式化)中,则在调用DateTime. ToString方法以存储字符串和日期时使用变体文化属性。这将确保DateTime类型的基本值在来自不同文化的用户读取或编写数据时不会发生变化。
以下代码示例说明使用日期时间.ToString方法将日期时间写入文件,作为为不变文化格式的字符串。然后,字符串以不变文化格式从文件中读取,然后使用Date.Parse方法解析为日期时间。然后,对日期时间进行格式化并显示为文化"fr-FR"和"ja-JP"
IComparer接口、 IComparer<T>接口
IComparer:命名空间 System.Collections , 该接口 只有一个方法Compare(Object, Object)
IComparer<T>:命名空间 System.Collections.Generic,该接口 只有一个方法ICompare(T, T) 。
Compare(Object, Object):提供比较两个对象的方法。
ICompare(T, T) :比较两个对象并返回一个值,该值指示一个对象小于、等于还是大于另一个对象。
IComparable接口、 IComparable<T>接口
IComparable:命名空间 System.Collections, 该接口 只有一个方法CompareTo(Object, Object)
IComparable<T>:命名空间 System.Collections.Generic 该接口 只有一个方法ICompareTo(T, T) 。IComparabler<T>泛型接口主要的作用是,作为参数传入Sort()方法,实现对象比较方式的排序。
提供Icomparable实现的类型还IEquatable实现接口。IEquatable接口Equals定义方法,该方法确定实现类型的实例的相等性。
StringComparison枚举的用法
StringCompariso指定供 Compare(String, String) 和 Equals(Object) 方法的特定重载使用的区域性、大小写和排序规则。
继承IComparer 接口的类 就可以通过Compare 、Equals方法使用该枚举,IComparer 接口只有一个方法int Compare(Object x, Object y);
public enum StringComparison {
CurrentCulture,
CurrentCultureIgnoreCase,
InvariantCulture,
InvariantCultureIgnoreCase,
Ordinal,
OrdinalIgnoreCase
}
CurrentCulture|CurrentCultureIgnoreCase:基于当前系统文化,程序交换对象是用户时候,结果给用户显示用这他们;
InvariantCulture|InvariantCultureIgnoreCase:统一基于en-US文化,程序间、程序数据库、程序网络交互用这他们;
Ordinal|OrdinalIgnoreCase:基于unicode排序规则
CurrentCulture 使用区域敏感排序规则和当前区域比较字符串。
CurrentCultureIgnoreCase 使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。
InvariantCulture 使用区域敏感排序规则和固定区域比较字符串。
InvariantCultureIgnoreCase 使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。
Ordinal 使用序号排序规则比较字符串。
OrdinalIgnoreCase 使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。它将使用InvariantCulture将字符串大写,然后逐字节比较。
1.首先是StringComparison.Ordinal
在进行调用String.Compare(string1,string2,StringComparison.Ordinal)的时候是进行非语言(non-linguistic)上的比较,API运行时将会对两个字符串进行byte级别的比较,因此这种比较是比较严格和准确的,并且在性能上也很好,一般通过StringComparison.Ordinal来进行比较比使用String.Compare(string1,string2)来比较要快10倍左右.(可以写一个简单的小程序验证,这个挺让我惊讶,因为平时使用String.Compare从来就没想过那么多).StringComparison.OrdinalIgnoreCase就是忽略大小写的比较,同样是byte级别的比较.性能稍弱于StringComparison.Ordinal.
2.StringComparison.CurrentCulture
是在当前的区域信息下进行比较,这是String.Compare在没有指定StringComparison的时候默认的比较方式.例子如下:
CultrueInfo的用法
CultrueInfo保存区域特定的信息,如关联的语言、子语言、国家/地区、日历和区域性约定。该类还提供对 DateTimeFormatInfo、NumberformatInfo、CompareInfo和TextInfo的区域性特定实例的访问。这些对象 包含区域性特定操作(如大小写、格式化日期时间和数字以及比较字符串)所需的信息。
部分区域性名称和标识符:
| 区域性名称 | 区域性标识符 | 语言-国家/地区 |
| ar | 0x0001 | 阿拉伯语 |
| ar-EG | 0x0C01 | 阿拉伯语 - 埃及 |
| zh-CN | 0x0804 | 中文 - 中国 |
| zh-CHS | 0x0004 | 中文(简体) |
| zh-TW | 0x0404 | 中文 - 台湾 |
| zh-CHT | 0x7C04 | 中文(繁体) |
| en | 0x0009 | 英语 |
| en-GB | 0x0809 | 英语 - 英国 |
| en-US | 0x0409 | 英语 - 美国 |
| fr | 0x000C | 法语 |
| fr-FR | 0x040C | 法语 - 法国 |
| de | 0x0007 | 德语 |
| de-DE | 0x0407 | 德语 - 德国 |
| es | 0x000A | 西班牙语 |
| es-BO | 0x400A | 西班牙语 - 玻利维亚 |
| es-ES | 0x0C0A | 西班牙语 - 西班牙 |
可以通过名称和区域性标识符来创建CultureInfo:
| 名称 | 说明 |
|---|---|
| CultureInfo (Int32) | 根据区域性标识符指定的区域性初始化 CultureInfo 类的新实例。
由 .NET Compact Framework 支持。 |
| CultureInfo (String) | 根据由名称指定的区域性初始化 CultureInfo 类的新实例。
由 .NET Compact Framework 支持。 |
| CultureInfo (Int32, Boolean) | 基于区域性标识符指定的区域性并基于布尔值(指定是否使用系统中用户选定的区域性设置)来初始化 CultureInfo 类的新实例。
由 .NET Compact Framework 支持。 |
| CultureInfo (String, Boolean) | 基于名称指定的区域性并基于布尔值(指定是否使用系统中用户选定的区域性设置)来初始化 CultureInfo 类的新实例。
由 .NET Compact Framework 支持。 |
IComparer、IComparable、StringComparison枚举、CultureInfo 的用法的更多相关文章
- Java SE 枚举的基本用法
出于对自己基础的稳打,期末考试后依旧对SE部分进行复习 枚举的基本用法 public enum Season { SPRING,SUMMER,AUTUMN,WINTER } public class ...
- OpenJDK源码研究笔记(十):枚举的高级用法,枚举实现接口,竟是别有洞天
在研究OpenJDK,Java编译器javac源码的过程中,发现以下代码. 顿时发现枚举类竟然也有如此"高端大气上档次"的用法. 沙场点兵(用法源码) com.sun.tools. ...
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- C#中的枚举类型enum用法
定义一个简单的枚举类型: enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; //这时候 Days.Sat = 0 ,后面依 ...
- StringComparison枚举
public enum StringComparison { CurrentCulture, CurrentCultureIgnoreCase, InvariantCulture, Invariant ...
- enum枚举类型 的用法
1.作为数组下标使用 enun box{pencil, ruler}; void main() { string s[2]; s[pencil]="pencil"; s[rule ...
- K:java中枚举的常见用法
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.....现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. ...
- Java枚举类型的用法
JDK1.5引入了新的类型——枚举.在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便. 1.用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fia ...
- C# 枚举与switch用法
using System; namespace Csharp { class Program { //枚举 public enum TimeOfDay { Morning=, Afternoon=, ...
随机推荐
- 微信小程序-国际化(miniprogram-i18n)
前情提要 最近维护了一个微信小程序的老项目,维护的其中一项是添加国际化.由于踩了蛮多坑,所以就有了这篇文档!!! miniprogram-i18n 对除小程序外的其他框架开发做过国际化的朋友来说i18 ...
- python22day
内容回顾 递归练习 sys os logging shutil 函数结束啦 今日内容 面向对象 楔子:做一个人狗大战的游戏 技能要有归属感,人是人,狗是狗,技能的函数要写在对应函数内部,闭包. 复杂的 ...
- CKKS :Part1,普通编码/解码
这篇文章,翻译于:[CKKS EXPLAINED: PART 1, VANILLA ENCODING AND DECODING] 主要介绍为CKKS中编码/解码做铺垫,讲一些基础知识 介绍 同态加密是 ...
- java解洛谷P1011车站问题
车站每站的上车人数,下车人数,剩余人数都组成了斐波那契数列 此代码只计算了剩余人数的情况,所以在输入需要总站数量时会-1取上一站的剩余人数 (最后一站会全部下车,没有上车人数) 每一站的剩余人数都可以 ...
- Python中的魔术方法
什么是魔术方法? 在Python中,所有用"__"包起来的方法,都称为[魔术方法]. 魔术方法一般是为了让显示器调用的,你自己并不需要调用它们. __init__:初始化函数 这个 ...
- vue之Better-Scroll组件 将滚动条滚到最底部
首先我们需要使用scrollTo这个方法: scrollTo(x, y, time, easing) 参数: {Number} x 横轴坐标(单位 px) {Number} y 纵轴坐标(单位 px) ...
- APC 篇—— APC 执行
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 关于https域名下的页面iframe嵌套http页面的问题
业务场景:在一个https域名下用iframe嵌套一个http域名的页面,会直接报错的,报错信息如下: 这段话的意思是:http域名的页面是通过https域名页面加载的,在一个安全的页面不允许加载一个 ...
- Python安装pip时, 报错:zipimport.ZipImportError: can't decompress data; zlib not available
解决办法: 1.安装依赖zlib.zlib-devel 2.重新编译安装Python 具体步骤: 1 到python安装目录下,运行./configure 2 编辑Modules/Setup文件 vi ...
- 用Java开发局域网内文件传输软件遇到的一些问题
项目地址:https://github.com/b84955189/FileTransfer 由于巨懒的我不太喜欢使用U盘操作文件,特此开发一个简易的文件传输程序. 目前仅限局域网内传输,后期会尝试写 ...