1. ホーム
  2. c#

[解決済み] インデックスプレースホルダーの代わりに、名前付き入力パラメータを受け付ける「String.Format」はありますか?重複

2022-05-15 06:04:43

質問

これは私が知っていることです

str = String.Format("Her name is {0} and she's {1} years old", "Lisa", "10");

しかし、私は次のようなものが欲しいのです。

str = String("Her name is @name and she's @age years old");
str.addParameter(@name, "Lisa");
str.addParameter(@age, 10);

どのように解決するのですか?

C# 6では 文字列補間 :

string name = "Lisa";
int age = 20;
string str = $"Her name is {name} and she's {age} years old";


として Doug Clutter で言及した 彼のコメント にあるように、文字列補間は フォーマット文字列 . コロンの後に書式を指定することで、書式を変更することが可能です。次の例では、コンマ付きで小数点以下2桁の数字を出力します。

var str = $"Your account balance is {balance:N2}"


として ベース で述べたように 彼の答え にあるように、文字列補間はテンプレート文字列をサポートしていません。実際、それに対するサポートは組み込まれていません。幸いなことに、いくつかの素晴らしいライブラリに存在します。


SmartFormat.NET などは、名前付きプレースホルダーをサポートしています。

Smart.Format("{Name} from {Address.City}, {Address.State}", user)

// The user object should at least be like that 

public class User
{
    public string Name { get; set; }
    public Address Address { get; set; }
}

public class Address
{
    public string City { get; set; }
    public string State { get; set; }
}

で利用可能です。 NuGet .


口ひげ もいい解決策になります。 ベース は、その長所を 彼の回答 .