为什么是C#';s格式说明符字符串?
为什么在类型为为什么是C#';s格式说明符字符串?,c#,string-formatting,language-design,C#,String Formatting,Language Design,为什么在类型为string的C#中,基本类型的格式说明符要比enum这样的类型更容易出错、可读性更强?虽然我现在知道了很多说明符,但我几乎总是要避免bug或奇怪的边缘情况枚举类型和值可以很容易地在它们的注释中提供这些信息 C#的1.0版于年发布,自C#1.1以来,object.ToString()一直是一项功能。这是一个老特性,我知道开发过程和目标现在看起来不一定和那时一样。但是,我无法理解为什么不使用类型安全、定义良好且易于文档化的行为,而使用诸如枚举或类之类的语言特性来代替字符串 当然,大多
string
的C#中,基本类型的格式说明符要比enum
这样的类型更容易出错、可读性更强?虽然我现在知道了很多说明符,但我几乎总是要避免bug或奇怪的边缘情况<代码>枚举类型和值可以很容易地在它们的注释中提供这些信息
C#的1.0版于年发布,自C#1.1以来,object.ToString()
一直是一项功能。这是一个老特性,我知道开发过程和目标现在看起来不一定和那时一样。但是,我无法理解为什么不使用类型安全、定义良好且易于文档化的行为,而使用诸如枚举或类之类的语言特性来代替字符串
当然,大多数较旧的语言,如C,都使用
string
类型格式说明符,所以这可能只是惯例?如果是这样,为什么他们觉得有必要遵循这一惯例?(此外,C使用%
字符作为说明符,因此C已经制定了自己的约定)这是因为他们认为格式在不同的文化、国家、系统和用户中会有很大差异(有些系统允许用户选择自己喜欢的格式)。我们将为所有的可能性提供一个非常大的枚举。而且,.net framework不能只维护大量的格式。因为它允许用户在任何自定义类型上定义新的自定义说明符。这里最可能的答案是,正如通常针对这些类型的问题一样,这正是语言制作者决定如何做的。您如何定义类似于DateTime.Now.ToString的内容(“yyyy'-'MM'-'dd'T'HH':'MM':'ss','fff”)
使用枚举?我希望为double
等使用枚举。though@Fixation但是,即使在那里,你也可以添加小数、填充等数字……枚举的固有性质是不允许扩展的。当构建一个API时,字符串似乎更实用,它可能会随着需求和用例的变化而变化。嗯,我不确定我是否遵循了。当前的格式系统已经内置了一定数量的区域性管理。我主要想问的是标准数字格式字符串和标准日期和时间格式字符串。当然,.net framework已经支持很多区域性。但并非所有用户都使用这些默认格式。