我有一个使用电话号码作为唯一标识符的系统.出于这个原因,我想使用标准化格式格式化所有电话号码.因为我无法控制我的源数据,所以我需要自己解析这些数字并将它们格式化,然后再将它们添加到我的数据库中.
我即将编写一个可以读取电话号码并输出标准化电话格式的解析器,但在此之前,我想知道是否有人知道我可以用来格式化电话号码的任何预先存在的库.
如果没有预先存在的库,那么在创建可能不明显的此功能时,我应该记住哪些事项?
虽然我的系统目前只处理美国号码,但我打算尝试包括对国际号码的支持,以防万一有可能需要它.
编辑我忘了提到我正在使用C#.NET 2.0.
我对C#版本和.NET框架版本感到困惑.换句话说,我想知道与C#版本和.NET框架的关系.例如:.NET Framework 3.0中的C#版本是什么?
在新的Roslyn预览网站上,它提到了能够尝试潜在的语言功能,并列出了三个这样的功能.

我之前听过的前两个(例如这里),但我无法从代码示例中找出"索引成员"是什么.任何人都可以根据其他来源或代码示例解释这些是什么吗?(它没有价值$x,不是C#5中的有效标识符.)
更新 - 根据Roslyn功能状态页面,此功能已被撤消.
由于我是刚刚完成工程的初学者,而且我对c,c ++有很好的了解...我还想过研究c#,但我发现c#4.0已经发布了......
任何人都可以解释为什么这个片段:
// Create required tasks
foreach (var messageToSend in messagesToSend)
{
EmailMessage messageToBeSent = messageToSend;
Task<bool> processingTask = new Task<bool>(() => SendMessage(messageToBeSent));
processingTask.Start();
}
Run Code Online (Sandbox Code Playgroud)
与此不同的是:
// Create required tasks
foreach (var messageToSend in messagesToSend)
{
Task<bool> processingTask = new Task<bool>(() => SendMessage(messageToSend));
processingTask.Start();
}
Run Code Online (Sandbox Code Playgroud)
在第一个片段中,所有任务都以自己的消息开头,而在第二个片段中,所有任务都以相同的消息开头?
Resharper给出了这样的描述:"在关闭时访问foreach变量.使用不同版本的编译器编译时可能会有不同的行为." 为什么它会有不同的行为?
microsoft.net.compilers包的文档(https://www.nuget.org/packages/Microsoft.Net.Compilers/)说
.Net编译器包.引用此包将导致使用包中包含的特定版本的C#和Visual Basic编译器构建项目,而不是任何系统安装版本.
...这引出了一个问题:包中有哪个版本的编译器?
同一页面说它支持.NET framework 4.5,但这不是编译器版本,是吗?
该软件包有多个版本.我假设包的不同版本可能包含不同版本的编译器.是否有某个表指定每个包版本中的哪个编译器版本?
我想这个软件包包含c#和vb编译器,但我只对c#感兴趣.
使用 C# 3.0 的项目可以使用最新版本的 C# 但与 .NET Framework 版本相似的 dll 吗?
带有 .NET Framework 3.5 的项目可以使用带有最新版本的 .NET Framework 但类似 C# 版本的 dll 吗?
我正在VS2015中开展一个针对.Net framework 4.5的项目
在构建设置中,语言版本设置为"默认"
正如我读出,C#6中的.Net 4.6只添加,但我AM允许的(至少,代码编译和运行)使用string interpolation功能,该功能我读过是C#6的特征.
现在我很困惑:我现在正在编译C#6/.Net 4.6或.Net 4.5(我怎么能检查?)
在评论中我看到C#6语法与.NET框架版本无关.我从这个答案中得到了一个想法(C#的正确版本号是什么?)其中说的是用.NET 4.6和VS2015(2015年7月)发布的"C#6.0".所以我理解C#6(以某种方式)与.NET 4.6相关联
当我尝试使用Visual Studio 2010构建Visual Studio 2017解决方案(适用)时,它在下面的代码行上给了我一个语法错误。
var x = (from a in list where a.fld is null select a).ToList();
Run Code Online (Sandbox Code Playgroud)
我已经将该行更改为== null现在代码可以在两个版本的Visual Studio上编译,但是我想知道为什么is nullVS2010失败?