Сокращение для выполнения алгоритма в обратном порядке - PullRequest
2 голосов
/ 08 января 2020

Переполнение стека приветствий!

У меня есть метод, который выполняется при изменении проверенного состояния кнопки. Метод заменяет текст-заполнитель в редакторе форматированного текста на псевдоданные и наоборот. Пользователь может перетащить текст из таблицы данных в редактор форматированного текста.

_dtFields - это таблица данных, которая содержит текст-заполнитель и соответствующие псевдоданные, моя проблема в том, что при проверке состояния измените значение I l oop по всей таблице данных, чтобы увидеть, содержит ли редактор форматированного текста либо текст-заполнитель bChecked = true, либо редактор содержит псевдоданные bChecked = false. Есть ли более эффективный способ замены значений заполнителей псевдоданными, чем то, что я сделал здесь?

private void ViewMergedData(System.Boolean bChecked)
        {
            foreach (DataRow dr in _dtFields.Rows)
            {
                System.String sFieldName = "<<" + dr["fldFieldName"].ToString() + ">>";
                System.String sPsuedoData = dr["fldData"].ToString();

                //Check for fields on the document
                if (bChecked == true)
                {
                    //Replace with psuedo data
                    if (this.recEmailDesigner.Document.Text.Contains(sFieldName))
                    {
                        this.recEmailDesigner.Document.Text.Replace(sFieldName, sPsuedoData);
                    }
                }
                //Check for psuedo data on the document
                else if (this.recEmailDesigner.Document.Text.Contains(sPsuedoData))
                {
                    //replace with field name
                    this.recEmailDesigner.Document.Text.Replace(sPsuedoData, sFieldName);
                }
            }
        }

1 Ответ

1 голос
/ 08 января 2020

Вы можете заменить переменные sFieldName и sPseudoData динамическим c массивом из двух строк, а затем выбрать строку "in" и "out", используя индекс, основанный на bChecked. Тогда вам нужен только один «экземпляр» вашего кода, который выполняет тестирование и замену:

    private void ViewMergedData(System.Boolean bChecked)
    {
        int index = bChecked ? 0 : 1;
        foreach (DataRow dr in _dtFields.Rows)
        {
            System.String[] sInOut =
            {
                "<<" + dr["fldFieldName"].ToString() + ">>", // [0] - was sFieldName
                dr["fldData"].ToString()                     // [1] - was sPseudoData
            };
            // Check for field name OR pseudo data on the document
            if (this.recEmailDesigner.Document.Text.Contains(sInOut[index]))
            {
                // Replace with psuedo data OR field name
                this.recEmailDesigner.Document.Text.Replace(sInOut[index], sInOut[1 - index]);
            }
        }
    }

Использование этих «1007 *» и «1008 *« возврат »является обычной парадигмой в C и C++ кодирование, но может быть более традиционным и / или эффективным способом для чего-то подобного в C# (на каком языке я гораздо менее опытен).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...