Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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#的列表中读取最后三个元素?_C#_List - Fatal编程技术网

如何从带有c#的列表中读取最后三个元素?

如何从带有c#的列表中读取最后三个元素?,c#,list,C#,List,我试图编写一个解析器,从列表中读取从第三个到最后一个元素。这是一个数字或什么都没有。这是我的代码: public int parseLastId(String filepath) { List<string> lines = new List<string>(); String text = File.ReadAllLines(filepath).ToString(); lines = text.Split(',')

我试图编写一个解析器,从列表中读取从第三个到最后一个元素。这是一个数字或什么都没有。这是我的代码:

public int parseLastId(String filepath)
    {
        List<string> lines = new List<string>();
        String text = File.ReadAllLines(filepath).ToString();
        lines = text.Split(',').ToList();
        int id = Convert.ToInt32(lines[lines.Count - 3]);
        return id;
    }
public int parseLastId(字符串文件路径)
{
列表行=新列表();
String text=File.ReadAllLines(filepath.ToString();
lines=text.Split(',').ToList();
int id=Convert.ToInt32(行[lines.Count-3]);
返回id;
}
文件中的文本如下所示:


1,Joe,2,Jeff,

文件。ReadAllLines
将读取文本文件中的每一行

在文本文件中,只有一行

所以你可以改变

String text = File.ReadAllLines(filepath).ToString();

那么你剩下的节目就可以了

惯用C# 需要注意的是,您的代码不是以标准C#风格编写的

特别是:

  • 应使用
    string
    而不是
    string
  • 方法名称应以大写字母开头
  • 不需要在
    text.Split(',')
    上调用
    .ToList()
下面是一个经过编辑的代码版本,它更符合典型的C#标准——希望有帮助:)

错误处理 如果程序无法解析条目,则表示希望返回
nothing
。为此,您需要从方法中返回一个“可为null的int”(
int?
),并使用该方法

例如:

public int? ParseLastId(string filepath)
{
    var text = File.ReadAllLines(filepath)[0];
    var lines = text.Split(',');
    
    if (int.TryParse(lines[lines.Length - 3], out var id)
    {
        return id;
    }
    else
    {
        return null;
    }
}
我猜“不返回任何内容”的意思是0

public int parseLastId(string filepath)
{
    string text = File.ReadAllText(filepath);
    string[] lines = text.Split(',');
    return lines.Length >= 3 && int.TryParse(lines[lines.Length - 3], out int id) ? id : 0;
}

因此,示例的预期输出为“2”?C#8。你使用的是什么版本?“这是一个数字或什么都没有。”-这不是用int表示的,除非你定义了一些值来表示“什么都没有”——比如任何负值。或者您可以使用
int?
。从C#8向上(包括C#8),您还可以编写
行[^3]
。“对于任何数字
n
,索引
^n
序列相同。长度-n
”-谢谢你的回答。你的回答也很有效,谢谢。
public int? ParseLastId(string filepath)
{
    var text = File.ReadAllLines(filepath)[0];
    var lines = text.Split(',');
    
    if (int.TryParse(lines[lines.Length - 3], out var id)
    {
        return id;
    }
    else
    {
        return null;
    }
}
public int parseLastId(string filepath)
{
    string text = File.ReadAllText(filepath);
    string[] lines = text.Split(',');
    return lines.Length >= 3 && int.TryParse(lines[lines.Length - 3], out int id) ? id : 0;
}