ForEach String concat - PullRequest
       15

ForEach String concat

6 голосов
/ 15 июня 2009

Маленький вопрос новичка. У меня есть цикл foreach, где я пытаюсь получить доступ к свойству объекта строки и назначить строку.

foreach(row in Dataset)
{
 string finalName= row.name;

}

На каждой итерации мне нужно согласовать свойство name каждой строки с finalName

Большое спасибо,

Ответы [ 5 ]

25 голосов
/ 15 июня 2009

В зависимости от ваших требований к производительности вы можете выполнить конкататацию с помощью оператора сложения:

string finalName = string.Empty;
foreach(row in Dataset)
{
    finalName += row.name;    
}

или используйте StringBuilder :

Stringbuilder sb = new StringBuilder();
foreach(row in Dataset)
{
    sb.Append(row.Name);   
}

string finalName = sb.ToString();

Общее для очень небольшого числа добавлений, вы не заметите разницу между двумя версиями. Но если вы объединяете много строк, использование StringBuilder может принести ощутимые преимущества в производительности и памяти.

Также имейте в виду, что строки будут располагаться непосредственно одна за другой, поэтому вы также можете добавить пробел или новую строку между ними.


Специальный бонус LINQ one-liner:

Поскольку вы, кажется, плохо знакомы с C #, я бы посоветовал вам игнорировать этот, поскольку он довольно продвинутый и, откровенно говоря, не так удобочитаемый (но, с другой стороны, кому не нравится добавлять случайные биты LINQ в свой код? ). Тем не менее, я добавлю это здесь для полноты. Я не знаю, на что похожа производительность, но одно из главных преимуществ перед другими методами заключается в легкости, с которой вы можете поместить пробел или другой символ между строками. Просто измените значение в отмеченной строке на любое значение, с которым вы хотите разделить объединенные строки (например, Environment.NewLine или "")

string finalName = string.Join(
                "", //Change the value here to separate the strings.
                (from row in Dataset
                 select row.Name).ToArray());

или, если вы предпочитаете лямбды LINQ:

string finalName = string.Join(
            "", //Change the value here to separate the strings.
            Dataset.Select(row => row.Name).ToArray());
3 голосов
/ 15 июня 2009

Просто пара вещей ...

  1. DataSet нет строк, у них есть DataTable с, а у этих DataTable есть DataRows
  2. Вы можете использовать оператор += для выполнения конкатенации, хотя общий совет заключается в том, что объект StringBuilder лучше подходит для этого по причинам производительности и памяти.

Предполагая, что у вашего DataSet есть один DataTable и столбец, который вы ищете, называется name, вы можете использовать любой из них (первый - с помощью оператора +=, второй - с помощью StringBuilder)

string finalName = string.Empty;

foreach(DataRow row in dataSet.Tables[0].Rows)
{
    finalName += row["name"].ToString();
}

или

System.Text.StringBuilder builder = new System.Text.StringBuilder();

foreach(DataRow row in dataSet.Tables[0].Rows)
{
    builder.Append(row["name"].ToString());
}

string finalName = builder.ToString();
1 голос
/ 15 июня 2009

Вот один ...

string finalName = ""

foreach (DataRow row in dataSet.TableX)
{
   finalName += row.Name;
   finalName += Environment.NewLine;
}

Вот еще один ...

StringBuilder finalName = new StringBuilder()

foreach (DataRow row in dataSet.TableX)
{
    finalName.Append(row.Name);
    finalName.Append(Environment.NewLine);
}
1 голос
/ 15 июня 2009

Если вы действительно хотите конкатировать, то это все, что вам нужно ...

string finalName = "";

foreach(DataRow row in dataset.Tables[tablename].Rows)
{
 finalName += row.name;

}
0 голосов
/ 22 мая 2018

вы можете добавить значения в список, а затем объединить значения в списке

List<string> listRows = new List<string>();
    string rowValues = string.Empty;

    foreach(row in DataSet)
    {
        string fileName = row.name;
        listRows.Add(fileName);
    }

    rowValues = string.Join(",", listRows);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...