通常在 C# 中的许多位置集成一行代码

本文关键字:代码 一行 集成 位置 许多 | 更新日期: 2023-09-27 18:31:31

好的,这是我的代码段

MySqlConnection conn = new MySqlConnection("Userid=root;pwd=root;port=3306;host=localhost;database=test");
conn.Open();

由于我正在使用的新版本 devart 连接器存在一些问题,我必须添加一行代码OldCompatibility.BinaryAsString = true;在我的代码中无处不在,如下所示

OldCompatibility.BinaryAsString = true;
MySqlConnection conn = new MySqlConnectio("User id=root;pwd=root;port=3306;host=localhost;database=test");
conn.Open();

但问题是我必须在我的应用程序中进行此更改,这些应用程序有许多包含这段代码的页面。那么有没有办法全局执行此操作,这样我就不必在整个应用程序中进行此更改。我正在使用 Devart 连接器 6

通常在 C# 中的许多位置集成一行代码

假设您的连接每次都远程相似;不要。将所有连接逻辑保存在一个共享方法中,并使用它,而不是到处重复连接代码。

public static MySqlConnection Connect() {
    OldCompatibility.BinaryAsString = true;
    MySqlConnection conn = new MySqlConnection("User id=root;pwd=root;port=3306;host=localhost;database=test");
    conn.Open();
    return conn;
}

MySqlConnection 是你的自定义类,如果你把 OldCompatibility .BinaryAsString = true 放在 MySqlConnection 的构造函数中,那么它就可以工作

使用正则表达式查找和替换一次更改所有代码:

1.- 按 Ctrl+H 打开"查找和替换"窗口 输入您的搜索,将换行符替换为"'"(无引号)

2.-展开"查找选项"并选中"使用",选择"正则表达式"(这也激活了"查找内容"框旁边的右箭头。它列出了一些命令/快捷方式)。

例如:在查找时键入以下内容:

{MySqlConnection conn = new MySqlConnection}

然后尝试这个替换:

OldCompatibility.BinaryAsString = true;'n't't'1 MySqlConnection conn = new MySqlConnection

这将找到与搜索匹配的所有代码,并在其前面添加一行。请注意占位符 {...} 被替换为 ''1

您可以使用工厂方法

public class FactoryMethods
{
  public static MySqlConnection GetConfiguredConnection()
  {
    OldCompatibility.BinaryAsString = true;
    MySqlConnection conn = new MySqlConnectio("User id=root;pwd=root;port=3306;host=localhost;database=test");
    conn.Open();
    return conn;
  }
}

并假设连接是可识别的

using (var myConn = FactoryMethods.GetConfiguredConnection())
{
  // Use your connection here
}

真的应该考虑@minitech关于使用方法的建议,但如果你真的无法在任何地方更改代码,我只能看到两个选项;

  • 将MySQLConnection扩展到另一个命名空间中使用相同的名称的新类,只需更改构造函数以包含您的行即可。然后仅替换文件顶部的using行。

  • 如果无法做到这一点,请以相同的方式实现包装类。

这两个选项都可能无法工作(例如,如果类是最终的,则为 #1,如果类作为参数传递给任何函数,则为 #2),但除非你至少可以进行全局搜索/替换或使用方法实现@minitech的建议,否则我看不到任何其他方法。