C# 将字符串拆分为长度为3的集合字符串

C# 将字符串拆分为长度为3的集合字符串,c#,linq,ienumerable,C#,Linq,Ienumerable,假设我有一个字符串var s=123456789 在哪里 foreach(var c in DivideStr(s, 3)){ Console.WriteLine(c); } 将打印出123456789 这是一个使用循环和if语句很容易实现的问题。但是我想用C中的Take和Skip函数以如下方式完成 IEnumerable DivideStr(String s, Int n) { var a = s; while(!a.IsEmpty()) { y

假设我有一个字符串var s=123456789

在哪里

foreach(var c in DivideStr(s, 3)){
  Console.WriteLine(c);
}
将打印出123456789

这是一个使用循环和if语句很容易实现的问题。但是我想用C中的Take和Skip函数以如下方式完成

IEnumerable DivideStr(String s, Int n) 
{
   var a = s;  
   while(!a.IsEmpty())  
   {  
     yield return a.Take(n)  
     a = a.Drop(3) // or a.Skip(n)  
   }  
}
这样,如果我有var s=12345678 打印输出将是123、456和78

问题是上面的代码无法编译。我遗漏了什么?

如果s是12345678,这将产生123456,然后是78

尽管以这种方式使用Skip和Take没有多大实际意义,因为我们可以在没有任何枚举器开销的情况下生成s.Substring…-s。

如果s是12345678,那么将生成123456,然后是78


尽管以这种方式使用Skip和Take没有多大实际意义,因为我们也可以在没有任何枚举器开销的情况下生成s.Substring…-s。

尝试类似的方法

IEnumerable<string> splitstrings = Enumerable.Range(0, str.Length / 3)
        .Select(i => str.Substring(i * 3, 3));
还是这个

List<string> splitstrings = (from Match m in Regex.Matches(str, @"\d{1,3}")
                   select m.Value).ToList();

试试这样的

IEnumerable<string> splitstrings = Enumerable.Range(0, str.Length / 3)
        .Select(i => str.Substring(i * 3, 3));
还是这个

List<string> splitstrings = (from Match m in Regex.Matches(str, @"\d{1,3}")
                   select m.Value).ToList();

你具体有什么问题?我有各种各样的想法,但我怀疑其中任何一个与你的问题有关。你希望这篇文章发表什么?你具体有什么问题?我有各种各样的想法,但我怀疑其中任何一种都与你的问题有关。你希望打印什么?使用子字符串意味着你需要检查绑定条件的排列使用子字符串意味着你需要检查绑定条件的排列