1 Востаннє редагувалося Betterthanyou (26.03.2020 23:46:46)

Тема: C# Оптимізувати код / масив рядків у один рядок

Є такий код:

            string[] FieldNames, 
...
            string allFieldNames = " ( ";
            string allFieldValues = " ( ";

            for (ushort i = 0; i < FieldNames.Length; i++)
            {
                allFieldNames += FieldNames[i];
                allFieldValues += "$" + FieldNames[i];

                if (i + 1 == FieldNames.Length)
                {
                    allFieldNames += " ) ";
                    allFieldValues += " ) ";
                }
                else
                {
                    allFieldNames += ", ";
                    allFieldValues += ", ";
                }
            }

Цей код з масиву рядків робить один рядок. Якщо б сепаратор була кома ", " можна було би скористатися string.Join методом

string.Join(",", arr);

Але що робити якщо мені потрібно перед початком рядка масиву добавити додатковий знак долару "$" ? Як можна позбутися циклу for ?

Наприклад
Масив

string[] FieldNames = new string[]{"OrganizationName_", "Date_ "};

Результат

allFieldNames = " ( OrganizationName_, Date_ ) "
allFieldValues = " ( $OrganizationName_, $Date_ ) "

2 Востаннє редагувалося koala (27.03.2020 00:21:34)

Re: C# Оптимізувати код / масив рядків у один рядок

         string allFieldNames = string.Format(" ( {0} ) ",string.Join(", ", FieldNames));
         string allFieldValues = string.Format(" ( {0} ) ",string.Join(", ", FieldNames.Select(v=>'$'+v)));

Перший Format можна замінити на " ( " +...+" ) ".
Лямбду можна переписати як v=>string.Format("${0}",v).
Гидота цей ваш шарп.

Подякували: Betterthanyou1

3 Востаннє редагувалося leofun01 (27.03.2020 00:31:46)

Re: C# Оптимізувати код / масив рядків у один рядок

Якщо без циклу :

allFieldNames  = " ( "  + string.Join(", " , FieldNames) + " ) ";
allFieldValues = " ( $" + string.Join(", $", FieldNames) + " ) ";

Якщо залишити цикл :

StringBuilder sb;
sb.Append(...); // Просто і швидко.
sb.AppendFormat(...); // Повільніше, але теж варіант.

Мені здається проблема взагалі не тут. Яке завдання ?

Подякували: koala, Betterthanyou2

4 Востаннє редагувалося Betterthanyou (01.04.2020 01:48:25)

Re: C# Оптимізувати код / масив рядків у один рядок

leofun01 написав:

Мені здається проблема взагалі не тут. Яке завдання ?

Роблю метод який буде вставляти значення в таблицю БД mysql.

TableName - Ім'я таблиці
FieldNames - Назви полів
FieldValues - Значення полів
ind - Ідентифікатор БД

public static void Insert(
            string TableName, 
            string[] FieldNames, 
            string[] FieldValues,
            int ind = 0
            )
        {
            if (FieldNames.Length != FieldValues.Length)
            {
                throw new Exception("Error! Number of the FieldNames and FieldValues are not equal.");
            }
            
            MySqlCommand mySqlCommand = new MySqlCommand();
            mySqlCommand.Connection = mySqlConnections[ind];

            string allFieldNames =
                " ( " +
                string.Join(", ", FieldNames) +
                " ) ";

            string allFieldValues =
                " ( @" +
                string.Join(", @", FieldNames) +
                " ) ";

            mySqlCommand.CommandText =
                "INSERT INTO " +
                TableName +
                allFieldNames +
                " VALUES " +
                allFieldValues;

            for (ushort i = 0; i < FieldNames.Length; i++)
            {
                mySqlCommand.Parameters.AddWithValue(
                    "@" + FieldNames[i],
                    FieldValues[i]
                    );
            }

            mySqlCommand.ExecuteNonQuery();
        }
Подякували: leofun011

5 Востаннє редагувалося fed_lviv (27.03.2020 14:41:23)

Re: C# Оптимізувати код / масив рядків у один рядок

Betterthanyou ну якщо так конче необхідно "склеювати запити руцями", то можливо спробуйте окремий метод для цього створити (для того аби валідувати все що прийде на склеювання та й було б добре звертати увагу на тип даних, бо варіант - MySqlDbType.String якось лякає) і вже його використовувати в методі - Insert

Подякували: leofun01, Betterthanyou2