向List <Tuple>添加了元素

use*_*256 0 .net c#

我有一个List定义如下:

List<Tuple<string, long, DateTime>> firefoxBookmarkPaths = new List<Tuple<string, long, DateTime>>();
Run Code Online (Sandbox Code Playgroud)

但是我在添加到我的列表时遇到问题:

List<Tuple<string, long, DateTime>> firefoxBookmarkPaths = new List<Tuple<string, long, DateTime>>();

long fileSize = 0;
string bookmarkFile = null;
string directoryToCheck = null;
DateTime fileModifiedDate = DateTime.MinValue;

foreach (var dir in basePersistDirectories)
{
    directoryToCheck = dir + @"\C\Users" + @"\" + Environment.UserName + @"\" + @"AppData\Roaming\Mozilla\Firefox\Profiles";
    if (Directory.Exists(directoryToCheck))
    {
        var subDirectories = Directory.GetDirectories(directoryToCheck);
        foreach (var directory in subDirectories)
        {
            bookmarkFile = directory + @"\places.sqlite";

            if (File.Exists(bookmarkFile))
            {
                fileSize = new FileInfo(bookmarkFile).Length;
                fileModifiedDate = new FileInfo(bookmarkFile).LastWriteTimeUtc;
            }
        }

        firefoxBookmarkPaths.Add(bookmarkFile, fileSize, fileModifiedDate);
    }
}
Run Code Online (Sandbox Code Playgroud)

该行firefoxBookmarkPaths.Add(bookmarkFile, fileSize, fileModifiedDate);抛出错误"没有重载方法'添加'需要3个参数." 如何在此列表中添加元素?

Kev*_*per 5

你没有用元组调用.Add(),你用三个参数调用.Add(),它没有重载方法(如错误信息所示).相反,你需要做这样的事情:

firefoxBookmarkPaths.Add(Tuple.Create(bookmarkFile, fileSize, fileModifiedDate));
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是C#7.0,则可以使用一些语法糖:

firefoxBookmarkPaths.Add((bookmarkFile, fileSize, fileModifiedDate));
Run Code Online (Sandbox Code Playgroud)

编辑

正如下面的评论所指出的,这不是语法糖,而是一种不同的类型.虽然如果你使用C#7.0,使用不同的类型也会很好.

  • 它不是sintax糖,它是一种叫做"ValueTuple"的不同类型,它是一种结构.另一方面,`元组`是一个类.如果OP更改为第二个选项,则必须更改所有代码,包括列表声明. (2认同)