【问题标题】:Join list of string to comma separated and enclosed in single quotes将字符串列表加入逗号分隔并用单引号括起来
【发布时间】:2011-08-03 23:44:41
【问题描述】:
List<string> test = new List<string>();
test.Add("test's");
test.Add("test");
test.Add("test's more");
string s = string.Format("'{0}'", string.Join("','", test));

现在 s 是 'test's','test','test's more' 但我需要用 2 个单引号替换内引号

像这样:'test''s','test','test''s more'

更新:我让它按如下方式工作,但如果可能的话,我更喜欢更清洁的方式。

string s = string.Format("`{0}`", string.Join("`,`", test)).Replace("'", "''").Replace("`", "'");

【问题讨论】:

    标签: c# string c#-4.0 string-formatting


    【解决方案1】:

    这应该可行:

    List<string> test = new List<string>(); 
    test.Add("test's"); 
    test.Add("test"); 
    test.Add("test's more");
    string s = string.Join("','", test.Select(i => i.Replace("'", "''")));
    

    如果您真的想用单引号将整个内容括起来:

    string s = string.Format("'{0}'", string.Join("','", test.Select(i => i.Replace("'", "''"))));
    

    【讨论】:

    • 你们太棒了。我一直在努力做到这一点,但这并没有引起我的注意。
    • 我不认为 ToArray() 调用是必要的。
    【解决方案2】:

    这可能比使用string.replace 更容易

    string s = "'" + String.Join("','", test) + "'";
    

    【讨论】:

    • 但这并没有转义单引号。 Jay Riggs 的解决方案对于原始海报的情况是正确的。
    【解决方案3】:

    试试这个:

    string s = string.Join(",", test.Select(x => string.Format("'{0}'", x.Replace("'", "''"))));
    

    顺便说一句,“测试”中没有撇号 - 撇号 aren't used for plurals

    【讨论】:

    • :) 你是对的。我编了一些测试清单,我并不是真的要说测试。我只想要一些带撇号的数据。
    【解决方案4】:

    这不是每个人的口味,但我喜欢为这类任务创建辅助扩展,并将它们放入“实用程序”命名空间:

    public static class ListExtensions
    {
       public static void AddDoubleQuoted(this List<string> list, string input)
       {
         input = input.Replace("'", "''");
         list.Add(input);
       }
    }
    
    List<string> test = new List<string>();
    test.AddDoubleQuoted("test's");
    test.AddDoubleQuoted("test");
    test.AddDoubleQuoted("test's more");
    string s = string.Format("'{0}'", string.Join("','", test));
    

    【讨论】:

    • 这个很酷,我更喜欢上面那个是因为我只需要在一个地方使用它。但是我刚刚学会了如何创建扩展。谢谢。
    • @gangt 没问题!我第一次学习扩展时,我也觉得它很棒。
    【解决方案5】:

    您始终可以在构建字符串之前对引号进行编码。

    【讨论】:

    • 应该是评论而不是答案!
    【解决方案6】:

    我喜欢没有替换的版本:

    using System.Linq;
    (...)
    string s = String.Join(", ", from l in MyList select String.Format("'{0}'", l));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-03
      • 2022-01-20
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多