Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Split-列表上的Split不返回所有需要的字符串_C#_List_Split - Fatal编程技术网

C#Split-列表上的Split不返回所有需要的字符串

C#Split-列表上的Split不返回所有需要的字符串,c#,list,split,C#,List,Split,我对C#相当陌生,在尝试按列表元素拆分时遇到了一个问题。 我有一个包含以下字符串属性的资源文件: 我在一个列表中收集了它们,如下所示: public List<String> RawNewsList1 = new List<String>() { {Resource.NewsContentAndroid1}, {Resource.NewsMetaAndroid1}, }; public List RawNewsList1=新列表() { {Resource.n

我对C#相当陌生,在尝试按列表元素拆分时遇到了一个问题。 我有一个包含以下字符串属性的资源文件:

我在一个列表中收集了它们,如下所示:

public List<String> RawNewsList1 = new List<String>()
{
  {Resource.NewsContentAndroid1},
  {Resource.NewsMetaAndroid1},
};
public List RawNewsList1=新列表()
{
{Resource.newscontendroid1},
{Resource.newsmataandroid1},
};
我试图在分号上拆分,但只从第二个列表项中获取结果。 我的拆分如下所示:

public void FilterRawNews()
{
  String[] seperator = { ";;;" };
  String[] filteredList1 = { "" };

  for (int i = 0; i < RawNewsList1.Count; i++) {

    filteredList1 = RawNewsList1[i].Split(seperator, 5,
         StringSplitOptions.RemoveEmptyEntries);

  }

  foreach (String s in filteredList1)
  {
    Console.WriteLine(s);
    
  }
}
public void filterRownews()
{
字符串[]分隔符={;;“};
字符串[]filteredList1={”“};
for(int i=0;i
它唯一的印刷品是:

110

2.8

02-07-2020

我做错了什么?
提前谢谢

在每次迭代中都会覆盖filteredList1。 这就是为什么你只能得到最后的结果

只需将filteredList1声明为列表并使用AddRange()

编辑:或使用LINQ:

var raw=newlist(){“111;;;222”,“333;;;444”};
字符串[]分隔符={;;“};
var filterlist1=raw.SelectMany(r=>r.Split(分隔符,5,StringSplitOptions.RemoveEmptyEntries)).ToList();
filteredList1变量首先由来自第一个资源的数据填充,然后在下一个循环中,变量的内容将替换为来自第二个资源的数据

您可以使用具有AddRange方法的
列表
来继续向列表中添加元素

List<string> filteredList1 = new List<string>();

for (int i = 0; i < RawNewsList1.Count; i++) {

    filteredList1.AddRange(RawNewsList1[i].Split(seperator, 5,StringSplitOptions.RemoveEmptyEntries));

}   

那么,这一行发生了什么?当您处理可以作为数据序列处理的对象时,将使用该语法。在此上下文中,数组RawNewsList1是一个数据序列,我们可以使用通过使用Linq名称空间带来的IEnumerable扩展。SelectMany扩展需要一个lambda表达式(a=>..),该表达式用于生成指令,其中序列(a)的每个元素被传递到一个表达式,该表达式返回另一个数据序列(通过拆分返回的数组)。返回的序列累积到原始RASNewList1中的下一个元素生成的序列。最后,通过调用ToList()

.Split(separator,5,StringSplitOptions.RemoveEmptyEntries)[1]实现累积序列;如果您尝试调试代码,您会注意到filteredList1首先填充了来自第一个资源的数据,然后在下一个循环中,变量的内容被替换为来自第二个资源的数据。正如您所看到的,它只读取第二个资源的最后一个单元格。在调试模式下运行代码,查看是否所有值都被读取到RawNewsList1中,然后从那里开始
filteredList = RawNewsList1.SelectMany(a => a.Split(seperator,5, StringSplitOptions.RemoveEmptyEntries)).ToList();