私のコードに$"hello {person}"
とnameof(arg1)
のようなものを使用していますが、プロジェクトのプロパティを調べるのに.NET 4.5をターゲットにしています。.VS 2015 NET 4.5の文字列補間と名前の使用
これは問題ありませんか?私はこれらのことが4.6で導入されたと思った。
私のマシンではプロジェクトが正常に構築され実行されますが、展開すると何かがうまくいかないと心配しています。
私のコードに$"hello {person}"
とnameof(arg1)
のようなものを使用していますが、プロジェクトのプロパティを調べるのに.NET 4.5をターゲットにしています。.VS 2015 NET 4.5の文字列補間と名前の使用
これは問題ありませんか?私はこれらのことが4.6で導入されたと思った。
私のマシンではプロジェクトが正常に構築され実行されますが、展開すると何かがうまくいかないと心配しています。
これはフレームワーク機能ではなく、コンパイラ機能です。我々が正常に一言で言えばVisual Studioの2015年
に私たちの.NET 3.5のプロジェクトとの両方の機能を使用すると、コンパイラはString.Format("hello {0}", person)
から$"hello {person}"
と"arg1"
へnameof(arg1)
を変換します。それはただ構文的な砂糖です。
ランタイムはString.Format
コール(または文字列リテラル "arg1")を認識し、元のソースコードがどのように見えるかを知らない(または気にしません)。 String.Format
は、.NET Frameworkの初期段階からサポートされているため、以前のバージョンのフレームワークを対象にすることはできません。
'FormattableString'の周りに少しのしわがあるのを私の答えで見てください。 –
これらはC#6
で導入されました。 .Net
はそれとは関係ありません。したがって、C#6コンパイラを使用している限り、これらの機能を使用できます。
What is the difference between C# and .NET?
そうです、それは、.NET 4.5をターゲットプロジェクトでそれらを使用すること大丈夫です。
これは.NETフレームワークコンポーネントのないC#6の機能です。
これは完全にnameof
の真ですが、少しでも真の文字列補間です。
using System;
using System.Globalization;
using static System.FormattableString;
class Test
{
static void Main()
{
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
double d = 0.5;
string local = $"{d}";
string invariant = Invariant($"{d}");
Console.WriteLine(local); // 0,5
Console.WriteLine(invariant); // 0.5
}
}
:あなたは不変の書式設定をしたい場合に便利である、
FormattableString
に補間された文字列を変換も
文字列の補間は、ほとんどの場合、string.Format
を使用しますが、.NET 4.6を使用している場合、それはすることができます
は、単にstring.Format
へのコールを呼び出した場合は明らかにこれは動作しないだろう...その代わり、この場合には、それはlocal
への割り当て文でstring.Format
を呼び出し、invariant
への割り当て文でFormattableStringFactory.Create
を呼び出し、上FormattableString.Invariant
を呼び出します結果。以前のバージョンのフレームワークに対してこれをコンパイルしようとすると、FormattableString
は存在しないため、コンパイルされません。あなたが本当にしたい場合はFormattableString
とFormattableStringFactory
の独自の実装を提供することができ、コンパイラはそれらを適切に使用します。
Jon Skeetの[バージョンを解く](http://csharpindepth.com/Articles/Chapter1/Versions.aspx)を参照してください。それはC#6.0をカバーしませんが、概念は同じです。 – Habib