我有这样的代码:
string[] list_lines = System.IO.File.ReadAllLines(@"F:\VS\WriteLines.xls");
System.Console.WriteLine("Contents of Your Database = ");
foreach (var line in list_lines.OrderBy(line => line.Split(';')[3]))
{
Console.WriteLine("\t" + line);
}
我想TryParse list_lines所以它们是数字,而不是字符串。 是否有可能“批量”'不知怎的? 每行在拆分后由5个字符串组成。
修改
我写了这个:
string[] list_lines = System.IO.File.ReadAllLines(@"F:\VS\WriteLines.xls");
int[] newList;
// Display the file contents by using a foreach loop.
System.Console.WriteLine("Contents of Your Database = ");
int.TryParse(list_lines[], out newList);
foreach (var line in newList.OrderBy(line => line.Split(';')[3]))
{
// Use a tab to indent each line of the file.
Console.WriteLine("\t" + line);
}
但是我在list_lines []上遇到错误,它说必须有一个值。
答案 0 :(得分:0)
您可以使用SelectMany
展平列表。
list_lines.SelectMany(line => line.Split(';')).Select(cell => int.Parse(cell));
如果可以有非数字单元格并且您正在寻找正数,则可以添加Where
子句
list_lines.SelectMany(line => line.Split(';')).Where(cell => cell.All(@char => char.IsDigit(@char))).Select(cell => int.Parse(cell));
答案 1 :(得分:0)
一种方法:
int number;
var intList = list_lines.Select(s => s.Split(';')
.Where(p => Int32.TryParse(p, out number))
.Select(y => Int32.Parse(y)))
.SelectMany(d=>d).ToList();
答案 2 :(得分:0)
基于your previous question,您似乎想要通过将第三个拆分结果排序为int
,然后您可以这样做:
foreach (var line in list_lines.OrderBy(line =>
{
int lineNo;
var success = int.TryParse(line.Split(';')[3], out lineNo);
if(success) return lineNo;
return int.MaxValue;
}))
{
Console.WriteLine("\t" + line);
}
我在int.MaxValue
失败时默认使用TryParse
。这样,失败的线路将是最后的。如果您希望首先出现失败的行,则可以将默认值更改为int.MinValue
。
顺便说一句,C#命名约定使用 camel-case 表示变量,例如lineNo
和listLines
,而不是line_no
和list_lines
。
要获得与每一行对应的int[]
,您可以使用类似的逻辑,但现在采用Select()
方法而不是OrderBy()
:
int[] newList = list_lines.Select(line =>
{
int lineNo;
var success = int.TryParse(line.Split(';')[3], out lineNo);
if(success) return lineNo;
return int.MaxValue; //or whatever default value appropriate
})
.ToArray();