在C#6.0中使用插值字符串显示电话号码

在C#6.0中使用插值字符串显示电话号码,c#,c#-6.0,C#,C# 6.0,我想使用C#6.0插值字符串方法来格式化电话号码。从数据库中,我得到的电话号码是一个7位数的值——没有特殊字符 如何使用插值字符串生成xxx-xxxx格式?只需使用自定义数字格式000-0000 var phoneNumber = 5551234; var formatted = $"{phoneNumber:000-0000}" // "555-1234" 通过可选扩展,您可以执行以下操作: var phoneNumber = 5551234; int? extension = 9876;

我想使用C#6.0插值字符串方法来格式化电话号码。从数据库中,我得到的电话号码是一个7位数的值——没有特殊字符


如何使用插值字符串生成xxx-xxxx格式?

只需使用自定义数字格式
000-0000

var phoneNumber = 5551234;
var formatted = $"{phoneNumber:000-0000}" // "555-1234"
通过可选扩展,您可以执行以下操作:

var phoneNumber = 5551234;
int? extension = 9876;
var formatted = $"{phoneNumber:000-0000}" // "555-1234"
if (extension != null)
    formatted = $"{formatted} Ext. {extension}"; // "555-1234 Ext. 9876"

// or alternatively
var formatted = $"{phoneNumber:000-0000}{(extension != null ? $" Ext. {extension}" : "")}";

不幸的是,在一个表达式中包含字符串的可选部分并不容易,但这是可行的。不过,我不建议你把这一切都塞进肚子里。对于您对“可读性”的定义,我会选择更具可读性的方法。

谢谢您的回答。如果我可以问一个后续问题:我也在一个单独的变量中获得电话分机,但并非所有电话号码都有电话分机。如何计算phoneExt的null值,如果不是null,则使用c#6.0方法将其添加到同一字符串中。我可以很容易地做格式化的+=(phoneExt==null?”“+”Ext.“+phoneExt.ToString())但我想掌握这种新方法。我找到了我后续问题的答案:var formatted=$”{phoneNumber:000-0000}{(string.IsNullOrEmpty(phoneExt)?“:”Ext.“+phoneExt.ToString())}”;可以这样看,大括号中的任何表达式(
{}
)都是您通常可以编写的任何C#表达式,调用了
ToString()
。如果有自定义格式(由
表示),则
右侧的所有内容都是格式化字符串。因此,在本例中,
$“{phoneNumber:000-00000}”
实际上与
phoneNumber.ToString(“000-0000”)
相同。我不会使用这种语法添加扩展,因为它并不是最好的处理方式,因为它往往会变得丑陋。但是有更好的方法来完成你想要的东西;没有格式化文本。顺便说一句,phoneNumber是一个字符串,我尝试更改它$“{phoneNumber:####-####}”;但这也不起作用。我得到中间没有连字符的数字。知道是什么导致了这个问题吗?格式字符串只适用于数字类型。如果它是一个字符串,那么您需要使用不同的方法。将其解析为一个数字并使用此处的代码,或者执行一些字符串操作以获得所需的格式。