使用 C# 的字符串数组的总和

Sum of a strings array using C#

我正在尝试使用 Web 服务构建控制台应用程序。它使用2个功能。第一个 GetAllProject 输出 ptojectsID 和 ProjectsNames。

第二个函数是GetUsersList,它输出用户列表。它需要通过调用第一个函数请求的 projectID 作为强制参数。

我想做的是将项目 ID、项目名称和用户 ID 总数输出到 CSV 文件中。

当我 运行 控制台时,它工作正常,但在我得到的用户 ID 总数列中作为输出 System.String[]

我不知道我能做些什么而不是在每一行中提取 System.String[] 对应于每个项目 ID 的实际用户 ID 总数

我不知道如何实现。给你我的代码。

string outCsvFile = string.Format(@"C:\test\test.csv");

WS.Projects[] pr = db.GetAllProject();

using (StreamWriter file = new StreamWriter(outCsvFile))
{
    for (int i = 0; i < pr.Length; ++i)
    {
        string[] subecjtsIDS = new string[] {""};
        subecjtsIDS = db.GetUsersList(pr[i].ProjectID);

        file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + subecjtsIDS);                          

    }
}

如果我正确地解释了您的要求,您并不是在尝试 求和 用户 ID(这没有意义),您只是在尝试 list 它们作为 CSV 行的一部分。假设这是正确的...

问题是这一行

file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + subecjtsIDS);

正在尝试将字符串数组连接到字符串上。为此,.NET 将调用数组的 .ToString() 方法,并且对于框架中的大多数引用类型,这仅打印类型的名称,即 "System.String[]".

相反,您需要迭代数组并打印其内容。 String class 提供了一个很好的方法来做到这一点:Join() 方法:

file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + String.Join(",", subecjtsIDS));

但是,如果您尝试将与每个项目关联的 主题数 添加到每一行,您只需要数组的 Length

file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + subecjtsIDS.Length);

试试这个

using (StreamWriter file = new StreamWriter(outCsvFile))
{
    for (int i = 0; i < pr.Length; ++i)
    {
        string[] subecjtsIDS = new string[] {""};
        subecjtsIDS = db.GetUsersList(pr[i].ProjectID);
        foreach(var id in subecjtsIDS)
        {
            file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + id );
        }    
    }
}

这将写入更多行,但如果您使用 string.Join("," subecjtsIDS),则列数会增加,您的数据将变得非常难以理解。

您将需要遍历该数组并创建一个字符串,其中的值以逗号分隔(或者您想要的任何输出)。例如:

string outCsvFile = string.Format(@"C:\test\test.csv");

WS.Projects[] pr = db.GetAllProject();

using (StreamWriter file = new StreamWriter(outCsvFile))
{
    for (int i = 0; i < pr.Length; ++i)
    {
        string[] subecjtsIDS = new string[] {""};
        subecjtsIDS = db.GetUsersList(pr[i].ProjectID);

        string formattedSubecjtsIDs;
        for (int j = 0; j < subecjtsIDs.length; j++)
        {
            if (!string.IsNullOrEmpty(formattedSubecjtsIDs))
                formattedSubecjtsIDs += ", ";
            formattedSubecjtsIDs += subecjtsIDs[j];
        }

        file.WriteLine(pr[i].ProjectID + ',' + pr[i].ProjectTitle + ',' + formattedSubecjtsIDS);                          

    }
}