C# 使用string.format()函数或LINQ分离字符串的最佳方法是什么?

C# 使用string.format()函数或LINQ分离字符串的最佳方法是什么?,c#,string,linq,C#,String,Linq,是否有办法使用string.format()函数或LINQ将“ABCDEFGHIJKLMNOP”更改为“ABCD-EFGH-IJKL-MNOP” 我用的是这句话 Out= String.Format("{0}-{1}", String.Format("{0}-{1}-{2}", In.Substring(0, 4), In.Substring(4, 4), In.Substring(8, 4)), In.Substring(12, 4)); 有没有更好更清晰的方法来实现这一点?您可以使用s

是否有办法使用
string.format()
函数或LINQ将“
ABCDEFGHIJKLMNOP
”更改为“
ABCD-EFGH-IJKL-MNOP
” 我用的是这句话

Out= String.Format("{0}-{1}", String.Format("{0}-{1}-{2}", In.Substring(0, 4), In.Substring(4, 4), In.Substring(8, 4)), In.Substring(12, 4));  
有没有更好更清晰的方法来实现这一点?

您可以使用
string.Format
,但仍然需要使用
子字符串来获取不同的部分

您可能只需要使用
Insert

string result = myString.Insert(12, "-").Insert(8, "-").Insert(4, "-");

LINQ对于类似这样的东西来说太过分了。

如果没有LINQ或string.format,这真的很容易做到,因此我建议使用以下代码:

string s = "ABCDEFGHIJKLMNOP";
for( int i = 4; i < s.Length; i += 5){
  s = s.Insert(i, "-");
}
string s=“ABCDEFGHIJKLMNOP”;
对于(int i=4;i
这将在每4个字符后插入一个破折号(我假设这是您想要的)。

只是为了好玩,在Linq中:

string result = input.Select((c, i) => i > 0 && i % 4 == 0 ? "-" + c : c.ToString())
                .Aggregate((s1, s2) => s1 + s2);
当然,我不建议在这种情况下使用Linq,因为“经典”解决方案会更有效、更具可读性


尽管如此,我还是喜欢写这篇文章:D

哈哈:D尼斯1!我也试过这样的东西。但并没有达到预期的效果,但这是一个问题(即使KooKiz发布了这个解决方案,他也知道),对于一个不知道这个代码的人来说,很难阅读和了解它的功能。我不明白你为什么只因为LINQ是新的和闪亮的就想用它。我喜欢LINQ,但我不会强迫它,因为它只是简单易懂,使用一个好的旧循环和另一个适合场景的结构。还有两件事。性能方面,这并不重要,因为它是一个非常小的字符串。只有当有大量字符串需要“转换”时,这才重要。在你的问题中,你要求一个更好或更清晰的方法。你真的认为这个代码更清晰吗?因此,在这种情况下,这不是一个有效的问题,而是一个可读性问题。我只对它感兴趣,除了你的建议,还有这个建议,如果字符串小于16个字符,这个建议不会消失。多亏了allRzassar——我的绳子也不会因为少于16个字符而死亡;)(或更长)变体的问题是,如果字符串短于16个字符,您的程序将死亡!!