使用char而不是字符串来表示单字符值有什么好处吗?

时间:2009-06-09 15:07:18

标签: .net string types

对于.NET字段和属性,根据定义只包含单个字符,将它们定义为char而不是字符串有什么好处?或者是对char数据类型的错误使用?

我正在考虑一个字段,可以保存M或F的性别,或中间的初始,或存储在数据库中的指标为Y或N.我通常将这些定义为字符串,但我想知道我是否应该将它们定义为char。

4 个答案:

答案 0 :(得分:12)

是的,char是正确的数据类型。一般的经验法则是:始终在上下文中选择最窄(最严格)的数据类型。这意味着如果偶然输入任何无效(或超出范围)数据,将无法接受,因此您的程序/数据库将不易出错。

从另一个角度考虑:当想在代码中使用整数值时,是否要创建一个大小为1的整数数组?当然不是,因为虽然它可以完成这项工作,但却完全不需要。即比较:

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

为:

int value = 123;
value = 456;

第一个是简单的荒谬,我相信你会看到。确实,这在数据库的上下文中并不那么明显(如果选择string数据类型,使用情况就这么简单了),但我认为这个类比有助于解释选择背后的逻辑。

此外,当涉及到操作代码中的值时,您应该发现在更合适的数据类型中使用该字段(即char)会使得在代码中适当地使用它会更加直接。

就性能而言,我不认为使用string会给你带来任何重大开销。好的,所以它占用略微更多内存,但这可能不是问题。不过我认为我刚刚提出的其他原因解释了为什么应该选择char

答案 1 :(得分:4)

Char和1个字符String在性能方面不会有太大差异。 CLR将为您实习生字符串,因此需要考虑(但我再也无法想象性能优势会很明显)。

请记住,编程语言是 astraction 的有用工具。始终创建有用的抽象。换句话说,我会定义你的字段:

enum Gender { Male, Female }

class Foo
{
    Gender gender;
    Char middleInitial;
    Boolean indicator;
}

此类在语义上很有价值,因为数据类型表明它们的用途。始终使用正确的工具。

答案 2 :(得分:2)

字符串是字符数组,所以除非你相信你可能需要数组附带的属性/方法(例如长度和子字符串函数),我会说坚持使用一个字符,因为你确定它只是一个角色。

答案 3 :(得分:1)

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

我通常更喜欢应用程序层中的enums / bools / native语义,从而转换为需要的数据库约定。毕竟Person.Gender == Femaleif (!Person.IsDeceased) {}更具可读性和清晰度。