ラベル 文字列リテラル の投稿を表示しています。 すべての投稿を表示
ラベル 文字列リテラル の投稿を表示しています。 すべての投稿を表示

2016年5月31日

C# 文字列リテラル(補間文字列・逐語的文字列)まとめ

C# 6.0 から補間文字列が追加されて、文字列リテラルの種類が 4 つに増えている。
MSDN にまとめた記事が無いので(たぶん)、自分用まとめ

書式 バックスラッシュ
エスケープ
改行 補間式 その他の
エスケープ
標準 "regular"
逐語的 @"verbatim
string"

"" → "

補間 $"1+1={1+1}"

{{ → {

}} → }

補間
逐語的
$@"interpolated
{"and"}
verbatim"

"" → "

{{ → {

}} → }


また、補間文字列の補間式の中に各種文字列リテラルを書くことが可能。
つまり、補間文字列のネストも可能。(実用性は無さそうだけど)
ただし、改行を許可しない補間文字列の中に、逐語的文字列や補間逐語的文字列を書いても改行を含めることはできない。(コンパイルエラー)

// 逐語的(改行無し) in 補間 : OK
var nested1 = $"this is {@"verbatim string"}";

// 逐語的(改行有り) in 補間逐語的 : OK
var nested2 = $@"this is {@"verbatim
string"}";


// 逐語的(改行有り) in 補間 : ERROR
var nested_error = $"this is {@"verbatim
string"}";

参考URL

2014年4月10日

C#.NET 複数行の文字列リテラルの改行コード

C#.NET は、@"" 形式だと文字列リテラルを複数行に書ける。
その場合の改行コードについて検索してみたが、見つからなかったので検証。(ググり方が下手なだけかも・・・)

[検証コード]

using System;

static class Program
{
    static void Main()
    {
        var text = @"minami
kotori";
        Console.WriteLine(text.Replace("\r", "[CR]").Replace("\n", "[LF]"));
    }
}

[結果]
ソースの
改行コード
結果
CRLF minami[CR][LF]kotori
CR minami[CR]kotori
LF minami[LF]kotori

複数行の文字列リテラルの改行コードは、ソースの改行コードと同じになる。
Visual Studio 使ってれば問題ないだろうけど、低機能のテキストエディタで改行コードごちゃまぜだったりすると・・・

検証環境

Windows 7 64bit/Visual Studio 2010 SP1/.NET 4.0

2013年6月25日

VB.NET のダブルコーテーション(二重引用符)

VB.NET のダブルコーテーション(二重引用符)は、 全角「“”"」 半角「"」すべて半角として解釈される。
※Visual Studio のエディタは全角ダブルコーテーションを自動で半角にするため、下記を試す場合はテキストエディタ+vbcで

'文字列リテラルの開始と終了も全角使用可能(全角半角の混在も可能)
'文字列リテラル内の全角ダブルコーテーションはエスケープが必要
Dim strings = {”a”, “b“, "c", "””", "““", """"}
Console.WriteLine(String.Join(",", strings)) '結果「a,b,c,",","」

'文字リテラルも同様
Dim chars = {”a”c, “b“c, "c"c, "””"c, "““"c, """"c}
Console.WriteLine(New String(chars)) '結果「abc"""」

そのため、文字列リテラルでは、全角ダブルコーテーションが表現できない。
非.NET の VB から続く残念仕様・・・
全角ダブルコーテーションが必要な場合は、定数として定義しておくのがベター。

Public Class SpecialChars
    Public Const LeftDoubleQuote = ChrW(&H201C)  '“
    Public Const RightDoubleQuote = ChrW(&H201D) '”
    Public Const FullwidthQuote = ChrW(&HFF02)   '"
End Class