反向执行算法的简写

Short hand for executing an algorithm in reverse

问候堆栈溢出!

我有一个方法可以在按钮的选中状态发生变化时执行。 该方法用伪数据交换富文本编辑器中的占位符文本,反之亦然。用户可以将数据 table 中的文本拖到富文本编辑器中。

_dtFields 是包含占位符文本和相应伪数据的数据 table,我的问题是,在检查状态更改时,我循环遍历整个数据 table查看富文本编辑器是否包含占位符文本 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);
                }
            }
        }

您可以用两个字符串的动态数组替换 sFieldNamesPseudoData 变量,然后 select 即 "in" 和 "out" 字符串使用基于 bChecked 的索引。那么你只需要一个 'instance' 的代码来进行测试和替换:

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

i1 - i"switch-back"的使用是CC++编码中的常见范例,但可能 是一种更传统的 and/or 有效的方法来实现 C# 中类似的东西(我对这种语言的经验要少得多)。