有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?

Posted

技术标签:

【中文标题】有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?【英文标题】:Is there a way to alternate single and double quotes in C# like you can in javascript? 【发布时间】:2019-01-31 15:34:26 【问题描述】:

我可以用javascript

    var s = 'He said "Hello" to me';
    or 
    var s = "don't be sad";

换句话说,如果我想在字符串中使用双引号,我可以使用单引号声明字符串。如果我想要字符串中的单引号,我可以使用双引号声明字符串。这超级方便。有没有人找到在 C# 中做类似事情的方法?

单引号很简单,c# 已经可以嵌入单引号了。至于双引号,似乎有两种常见的选择。

    使用反斜杠转义字符

    var s = "He said \"Hello\" to me";
    

    使用单引号并用双引号替换它们

    var s = "He said 'Hello' to me";
    s = s.Replace("'","\"");
    

我可以接受选项 2,但更好就是更好。

【问题讨论】:

不,C# 中的所有字符串都使用双引号。它是语言规范的一部分。 参见docs.microsoft.com/en-us/dotnet/csharp/programming-guide/… - 单引号表示字符,因此您需要在字符串文字中转义双引号。 var s = @"He said ""Hello"" to me" 是不涉及\ 的最接近便利的东西。如果您想要一个轻率的答案,那么从技术上讲,var s = $"He said '"'Hello'"' to me" 使用单引号来获得双引号...... 我很困惑 - 为什么不试试看它是否可以编译而不是在这里发布呢? (旁注:它没有)。 C# 有一个字符类型,而 JavaScript 只有字符串是这个语法不能工作的主要原因,顺便说一句。在 C# 中,'\u005c' 是一个单个字符,与单个字符串的类型不同。引入常量有时会被解析为字符串,有时会根据其中的内容被解析为字符的异常不会简化事情,尽管拥有字符常量的价值是值得怀疑的——但这是对 C 的保留。 【参考方案1】:

Javascript 和 C# 都是基于 C 的。

在 C 中,' 用于分隔字符," 用于分隔字符串。

在 Javascript 中没有字符类型,所以如果你想要一个字符,你可以使用单字符串。因此,它只需要",但许多习惯于 C 风格语言的人习惯于使用',并且更喜欢使用这种用于字符的单字符串。这很快导致人们开发其他样式,特别是因为转义规则会按照您所说的方式使其方便。

C#确实有字符类型,也有字符串类型,所以在这方面它保持了C的语法。

Javascript 语法的特性是由于其打字系统的一个特性而产生的,这是 C# 不匹配的,以及他们从 C 中借用语法的共同历史。如果设计者想要它,它在 C# 中将无法工作,不会使 stringchar 文字之间的区别变得非常复杂。

【讨论】:

【参考方案2】:

您可以在字符串上定义扩展方法,以加快您的工作并减少输入错误的机会。

    public static string ApostrophesToQuotes(this string s)
    
        return s.Replace('\'', '"');
    

还有另一种在字符串文字中写引号的方法。

var s = @"he said ""Hello"" to me");

但不能混合使用,因为撇号用于单字符文字(UTF-16 中的 2 字节整数),引号用于字符串文字(字符数组)。

【讨论】:

我喜欢函数的想法。它可以将整个事情保持在一条线上。至于双双引号,当文本变得复杂时,我发现真的很难阅读。【参考方案3】:

不,没有办法。

单引号'char变量分隔符

双引号"string 变量分隔符

查看MS string programing guide 了解更多信息。

【讨论】:

【参考方案4】:

我决定只使用单引号并用双引号替换它们。

    var s = "He said 'Hello' to me";
    s = s.Replace("'","\"");

这有点烦人,因为我需要粘贴这样的东西

    "children":["domid":"sbsmStatusFilter","datatitle":"SBS Status","dataicon":"img/appicons/rsm4-64x64.png","domid":"sbsMonitoringFilters","datatitle":"Monitoring","dataicon":"img/appicons/monitoring64x64.png"]

然后用文本编辑器的find替换功能把所有的双引号都换成单引号,然后加上文本替换代码,我最终变成了这个

    var text3 = @"'children':['domid':'sbsmStatusFilter','datatitle':'SBS Status','dataicon':'img/appicons/rsm4-64x64.png','domid':'sbsMonitoringFilters','datatitle':'Monitoring','dataicon':'img/appicons/monitoring64x64.png']";
    text3 = text3.Replace("'", "\"");

我猜还不错。至少文本相当容易阅读,因此人们可以修改它。

【讨论】:

这种忙碌的工作会让习惯 C# 的人更难阅读。

以上是关于有没有办法像在 javascript 中一样在 C# 中交替使用单引号和双引号?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在javascript中创建hashmap并像添加和删除值一样操作它

有没有办法像在 Webpack 中一样在 Parcel 中代理请求?

有没有办法像在 C++ 中挂钩非托管函数一样在 C# 中挂钩托管函数?

有没有办法像在 C++ 中挂钩非托管函数一样在 C# 中挂钩托管函数?

OBIEE有没有办法在我们运行仪表板时在excel中提供提示功能,就像在仪表板中一样

有没有办法强制 phpinfo() 输出其内容而不进行格式化。就像在 CLI 模式下一样?