代码之家  ›  专栏  ›  技术社区  ›  John M Gant aman_novice

对于单字符值使用char而不是string有什么好处吗?

  •  5
  • John M Gant aman_novice  · 技术社区  · 16 年前

    对于定义仅包含单个字符的.NET字段和属性,将它们定义为char而不是string是否有好处?或者char数据类型的使用不正确?

    我正在考虑一个字段,它可以保存一个m或f作为性别,或者中间的首字母,或者存储在数据库中的一个指示器作为y或n。我通常将它们定义为字符串,但我想知道是否应该将它们定义为char。

    4 回复  |  直到 16 年前
        1
  •  12
  •   Noldorin    16 年前

    对, char 是此的正确数据类型。一般经验法则是: 总是选择上下文中可能的最窄(最严格)的数据类型 . 这意味着,如果意外输入任何无效(或超出范围)的数据,将不会被接受,因此您的程序/数据库将变得不容易出错。

    从另一个角度来考虑:当想要在代码中使用整数值时,是否创建一个大小为1的整数数组?当然不是,因为尽管它能胜任这项工作 不必要的 . 即比较:

    int[] value = new int[1] { 123 };
    value[0] = 456;
    

    到:

    int value = 123;
    value = 456;
    

    第一个很简单,很荒谬,我相信你看到了。毫无疑问,这在数据库环境中并不明显(如果您选择 string 数据类型),但我认为类比有助于解释选择背后的逻辑。

    此外,在处理代码中的值时,您应该发现字段的数据类型更合适(即 烧焦 )使得在代码中适当地使用稍微简单一些。

    在性能方面,我无法想象使用 一串 会给你很大的开销。好吧,这就需要 轻微地 更多的内存,但这可能不是问题。不过,我认为我刚刚提出的其他原因可以解释为什么 应该 选择 烧焦 .

        2
  •  4
  •   Andrew Hare    16 年前

    Char 1个字符 String 在性能方面不会有太大的差别。clr将为您实习字符串,因此需要考虑这一点(但我再次无法想象性能优势将是显著的)。

    记住,编程语言作为 收敛剂 . 总是创建有用的抽象。换句话说,我将这样定义您的字段:

    enum Gender { Male, Female }
    
    class Foo
    {
        Gender gender;
        Char middleInitial;
        Boolean indicator;
    }
    

    这个类现在在语义上是有价值的,因为数据类型指示了它们的用途。务必使用正确的工具进行作业。

        3
  •  2
  •   TheTXI    16 年前

    字符串是字符数组,因此,除非您认为可能需要数组附带的属性/方法(如长度和子字符串函数),否则我会说坚持使用字符,因为您确定它只是一个字符。

        4
  •  1
  •   Cade Roux    16 年前

    字符串类将有一些开销。如果有char,是否需要用0x00表示空值或 <space> 还是其他未知指标?这将是一个数据库,还是来自一个数据库,您将在那里使用什么约定?

    我通常更喜欢在应用程序层使用Enums/Bools/NativeSemantics来实现这一点,从需要的任何数据库约定转换为需要的任何数据库约定。毕竟 Person.Gender == Female if (!Person.IsDeceased) {} 更清晰易读。