【问题标题】:String syntax question字符串语法问题
【发布时间】:2009-01-26 15:55:28
【问题描述】:

我想要实现的是合并三个字符串。两个作为字符串提供;名字和姓氏,而第三个是简单的逗号/空格分隔符。给定以下代码行:

//Working code
var sep = ", ";
var fullName = myNewBO[0].LastName + sep + myNewBO[0].FirstName;

//Erronous code
var fullName = myNewBO[0].LastName + ", " + myNewBO[0].FirstName;

字符串返回到 DataGridView 中的单元格。虽然第一位代码按预期执行,但后者没有。字符串未按预期显示在单元格中。有人能告诉我为什么后者不起作用吗?另外,如果您对问题有更好的解决方案,请提供一个。

编辑:已解决。 正如所怀疑的那样,并通过几个答案指出问题出在我的代码中的其他地方,而这两个替代方案的作用完全相同。感谢您的语法建议:)

【问题讨论】:

  • 为什么不起作用?你收到错误了吗?
  • 另外,你使用“var”的隐式类型而不是强类型作为字符串是有原因的吗?
  • @Ian:请注意,隐式类型仍然是强类型。它只是不明确。
  • @Josh:对原始帖子进行了编辑以提供更多详细信息。 @Ian:是的,为了摆脱 ReSharper 警告,我习惯于隐式键入自己,但出于某种原因,ReSharper 不喜欢它,并且有人告诉我在有意义的时候尝试遵循 ReSharper。不知道这里是不是这样。
  • 另一个注意事项:您可以让 ReSharper 的建议使用隐式类型作为提示,它会停止显示为橙色警告。

标签: c# string


【解决方案1】:

我更喜欢使用string.Format("{0}, {1}",myNewBO[0].LastName,myNewBO[0].FirstName)

现在您可以抽象出格式字符串,如果您希望它是“First Last”,例如您可以使用不同的格式字符串。

编辑

针对您的实际错误,我喜欢这里的其他人看不到您应该工作的代码行有什么问题,因此问题变成:“您如何将此值绑定到网格?”

您是在 Eval() 中执行此操作还是在后面的代码等中执行此操作......

一个建议是添加一个接受格式字符串的 ToString(string) 方法,然后您可以绑定到该方法的评估。如果您的业务需求发生变化,您只需更改格式字符串。

【讨论】:

  • 作为旁注,我故意交换了姓氏和名字,因为 First is First 它将进入位置 {0}。没什么大不了的,但个人喜好。
  • 谢谢...以后我一定会记住这个语法。错误在其他地方:P
【解决方案2】:
string.Join(sep, new string[] {myNewBO[0].LastName, myNewBO[0].FirstName});

【讨论】:

  • iirc 这更快,但格式肯定更易读
【解决方案3】:

我怀疑您的代码中发生了其他事情,并且您弄错了错误发生的位置。我一生都无法理解为什么这两个人的行为会完全不同。我建议您在分配后记录这两种情况的值 - 我相信您会发现它们是相同的。

【讨论】:

  • 我同意...只是想确定一下。
  • 它们现在都按预期工作,所以错误显然在其他地方
【解决方案4】:

你的两个电话真的没有区别,我看没有错误。你得到什么例外。 Joel Coehoorn 关于 String.Join 的回答非常适合您的需要。

【讨论】:

  • 我同意你的推理,但是由于某种原因,两者并没有提供相同的结果。错误可能在其他地方或pepkac ...:P
【解决方案5】:

它抛出了什么错误?这可以告诉你很多关于它为什么会崩溃的信息。

在我看来,从表面上看,您的电话都有效。我建议您确保 LastName 和 FirstName 是字符串而不是 null。可以肯定的是,我想您可以将 .ToString() 附加到 FirstName 和 LastName 的末尾。

【讨论】:

  • 对空对象调用 ToString() 将导致 NullReferenceException。对字符串本身调用 ToString() 毫无意义,Sakkle 将能够自己确定它们是否是来自智能感知的字符串。
  • 它不会崩溃,只是没有提供相同的最终结果。但是现在确实如此,因此错误显然在其他地方
猜你喜欢
  • 2014-01-14
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 2020-08-24
  • 2018-09-17
  • 2021-05-16
  • 2012-11-21
  • 1970-01-01
相关资源
最近更新 更多