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

时间:2015-09-01 16:42:46

标签: c# web-services visual-studio-2012 streamwriter subtotal

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

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

我想将它输出到CSV文件中的projectID,projectName和userID的总数。

当我运行控制台时,它工作正常,但在列中输入的总数为userID,我将其作为输出System.String[]

我不知道我能做些什么,而不是在每一行System.String[]上提取与每个projectID对应的实际用户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);                          

    }
}

3 个答案:

答案 0 :(得分:4)

如果我正确地解释了您的要求,那么您并未尝试总结用户ID(这没有意义),您只需要尝试列出它们作为CSV行的一部分。假设这是正确的......

问题是这一行

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

尝试将字符串数组连接到字符串上。为此,.NET将调用数组的.ToString()方法,对于框架中的大多数引用类型,这只会打印类型的名称,即&#34; System.String [] &#34;

相反,您需要迭代数组并打印其内容。 String类提供了一种很好的方法:Join()方法:

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

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

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

答案 1 :(得分:0)

试试这个

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),则列数会增加,您的数据将变得非常复杂,无法理解。

答案 2 :(得分:-1)

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

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);                          

    }
}