Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
高级C#重构_C#_Internationalization_Refactoring - Fatal编程技术网

高级C#重构

高级C#重构,c#,internationalization,refactoring,C#,Internationalization,Refactoring,作为国际化工作的一部分,需要重构string.Format(…)的用法,以便在格式化SQL查询时使用string.Format(CultureInfo.InvariantCulture…)选项。这是为了确保在各种语言区域性环境下运行时,代码将继续生成有效的SQL。在其他情况下,例如为UI格式化字符串时,string.Format(…)用法应保持不变 例如,需要更新以下代码才能使用string.Format(CultureInfo.InvariantCulture,…): 不幸的是,这种数据库访问

作为国际化工作的一部分,需要重构
string.Format(…)
的用法,以便在格式化SQL查询时使用
string.Format(CultureInfo.InvariantCulture…)
选项。这是为了确保在各种语言区域性环境下运行时,代码将继续生成有效的SQL。在其他情况下,例如为UI格式化字符串时,
string.Format(…)
用法应保持不变

例如,需要更新以下代码才能使用
string.Format(CultureInfo.InvariantCulture,…)

不幸的是,这种数据库访问模式在代码库中被使用了数千次,我想不出在这里可以使用什么简单的find-and-replace命令。任何查找和替换方法都需要足够高级,以便仅隔离结果字符串用作db.Query()参数的情况

我目前正在考虑的一些想法包括Resharper的模式搜索(我从未使用过它)、编写基于Roslyn的工具来智能地重构代码(似乎过于复杂)或Unix命令行工具的一些组合

我还对其他更重要的重构方法持开放态度,前提是它们可以在很大程度上实现自动化


建议以什么方式继续国际化此代码?

您可以使用C#的字符串插值。因此,查询将如下所示:

sql = $"SELECT {column} FROM {table}";
我认为字符串插值的默认值是当前区域性


另一方面,我仍然不建议在代码中构造查询,因为它可能容易受到SQL注入的攻击

Roslyn将非常适合这样做,老实说,写起来并不那么难。查看一个与a组合的,以加载您的解决方案并重写其中的每个语法树。关于Roslyn的更多背景信息,我提供了一篇我写过的论文:这让我想起了。如果你想重构它,为什么不将它重构到存储过程中呢?谢谢Jeroen鼓励我和Roslyn一起去。花了一段时间才弄对,但我现在有了一个非常令人满意的解决方案!
sql = $"SELECT {column} FROM {table}";