2011-05-03 69 views
2

有时ToString看起来很难看。
在下面的例子中,有更聪明的替换().ToString()吗?有更好看的方法吗? (int toString)

string value; 
int i; 
... 

value = (1 + i).ToString(); 

其次,你更喜欢什么?

value = "0"; 

value = (0).ToString(); 

我知道我更喜欢“0”的可读性,但它从另一方面不代表价值的方式作为第二相同。现在,如果有某种ToString运算符...

Nitpicking,但我现在无聊。 ;)


附录
这是我写这引起了我要问上面的问题的代码。

List<SelectListItem> result = new List<SelectListItem>(1 + items.Count); 

result.Add(new SelectListItem { Text = string.Empty, Value = "0" }); 
for (int i = 0; i < items.Count; ++i) 
{ 
    result.Add(new SelectListItem { 
     Text = items[i], 
     Value = (1 + i).ToString() 
    }); 
} 
+5

“丑”是一个主观的术语。对我来说丑陋的东西可能对你很好,也可能对你很好。 (也是nitpicky。).ToString()的美(对我来说)是它的可读性。它的使用非常普遍,所以不会误认为它的意思。 (对于相反的例子,考虑三元运算符...) – David 2011-05-03 20:42:29

+0

没有更好的词。但你是对的...我喜欢三元运算符。 ;) – 2011-05-03 20:46:13

+0

'“”+(1 + i)'如何抓住你? :-) – 2011-05-03 21:20:11

回答

1

ToString可能对本地化有用 - >(1000).ToString("N")。否则,我不明白你为什么要使用(0).ToString()而不是"0"

0

我总是使用string.Format("{0}", 1 + i)

我宁愿去"0",为什么要调用一个额外的方法?

+0

+1我会做完全一样的 – 2011-05-03 20:44:02

1

如果您需要将0表示为整数,请不要使用字符串,而应使用整数。

至于转换计算的结果为字符串:

var res = string.Format("{0}", i + 1); 

你并不需要使用()与面值整数 - 0.ToString()作品。

+0

在我的情况下,SelectListItem.Value是一个字符串,我喜欢与否。 :) – 2011-05-03 20:44:50

+1

@Carl - 现在,你的问题出现在哪里?我一定错过了它... – Oded 2011-05-03 20:46:57

+0

@Downvoter - 关心评论? – Oded 2011-05-03 20:49:30

3

其实我总是用Convert.ToString(i + 1)而不是(i + 1).ToString()。前者是无效的。我不会使用value = (0).ToString()

编辑

因为我真的很喜欢这种解决办法的,我会试着更好的保护它:

优点:

  1. 这是很常见的成语,不特别很难阅读。
  2. 它适用于值类型和引用类型 - 所以它增加了代码内聚性,因为所有转换看起来完全一样。
  3. 可用于代替大多数演员和转换。
  4. 它是无效的 - 例如,在处理DAO类或UI绑定时非常有用。

缺点:

  1. 它比铸模较慢(但并不比其他种的转换必然慢,像object.ToString())。
  2. 可能会隐藏空引用异常 - 通常不建议在核心业务类中使用这种异常(但同样很少在该类代码中使用文本到数字转换)。
+4

我只会使用“无效”代码,如果预计空值。意外的空*应该*导致异常,因为这意味着有什么问题。 – 2011-05-03 20:45:56

+0

@Matti Virkkunen:我不同意。如果存在从T到字符串period的有效转换,则类型T中的* valid * null“value”可以表示为空字符串。这不是一个错误*本身*。如果空值是*无效*,根据一些任意的业务规则,那么你应该实施一些明确的验证,以避免它。 – rsenna 2011-05-03 20:54:18

+0

@rsenna:如果您接受空字符串作为空值,那么它不是一个意外的空值。每次访问时明确验证事物会导致复杂且难以阅读的代码。检查它们可能发生的位置,并相信非空值不会在其他地方奇迹般地变为空值。为了清楚起见,我对海报作出了反应,说他总是*使用无效的方式,无论他是否希望空值。 – 2011-05-03 20:55:48

4

().ToString()是做第一件事最简洁的方法。任何熟悉表达式工作的人都不应该在阅读时遇到任何困难。

而做(0).ToString()就像做"a".ToCharArray()一样愚蠢。如果你有一个字面值你想要的值,使用它。

+0

哦......这就解释了它 - 你属于那个组的SO用户不仅回答问题,还试图诋毁任何认为不同的人。在你回答之前我没有看到,但这解释了你对评论我的答案的热情。我只希望你找到Stack Overflow之外的生活,我的朋友...... :-) – rsenna 2011-05-03 21:28:04

+0

@rsenna:哦,我的生活并不局限于Stack Overflow。我在互联网的其他部分也花费了相当多的时间! – 2011-05-03 21:30:31

+0

无论如何,我给你+1。这似乎对你很重要。 – rsenna 2011-05-03 21:33:17

1

丑是这样一个丑陋的词。例如,对我来说,完全是主观的,但是你的写作风格1 + i显然是错误的。数学家从不说1 + n,他们说n + 1。但这只是我的偏好。事关重大的事情在技术上很难回答。

+0

感谢您指出1 +我风格的问题。我认为它总是把常量放在==的前面。它必须以某种方式扩大自己,将其他运营商纳入我的脑海。 – 2011-05-03 21:41:17