C# C如何替换字符串中的变量

C# C如何替换字符串中的变量,c#,string.format,C#,String.format,我从数据库中得到了字符串 包含一些变量的字符串。 我知道string.format或$要替换, 但这不能解决问题 我想要得到的结果是 string name = "name1"; string country = "country1"; string greet = "Hi {name}, Are you from {country}"; 我怎样才能得到这个呢?你可以这样做: string result = $"Hi {name}, Are you from {country}"; 或者如果

我从数据库中得到了字符串 包含一些变量的字符串。 我知道string.format或$要替换, 但这不能解决问题

我想要得到的结果是

string name = "name1";
string country = "country1";
string greet = "Hi {name}, Are you from {country}";

我怎样才能得到这个呢?

你可以这样做:

string result = $"Hi {name}, Are you from {country}";
或者如果要使用字符串。替换:

如果您想使用$:


如果只想替换多个变量,可以按列表进行迭代:

var name = "name1";
var country = "country1";
var result = $"Hi {name}, Are you from {country}";
您可以尝试使用正则表达式替换所有{…}:


为什么不把result=greet.Replace{name},name;?我从数据库中得到的字符串,我不知道有多少变量可以让你也从数据库中得到问候语?我引用了我知道string.format的问题。。。但那不行solve@bradbury9他声称他知道string.format,但你在他的问题中看到了任何正确的实现吗?字符串中的变量没有顺序,我找不到index@ThelemePan您需要有替换字符串的逻辑;否则,根据您要替换字符串的内容?我认为OP是从数据库中获取格式字符串,因此您不能使用string.format使用字典比使用元组列表更好。Dictorial添加项比使用列表更复杂。如果不必搜索关键字列表,则性能会更好;应该是greet=greet.Replace。。。
string name = "name1";
string country = "country1";
string result = greet.Replace("{name}",name).Replace("{country}",country);
var name = "name1";
var country = "country1";
var result = $"Hi {name}, Are you from {country}";
string greet = "Hi {name}, Are you from {country}";
var placeholders = new List<(string placeholder, string value)>()
{
    ("name", "name1"),
    ("country1", "country1")
};

foreach (var ph in placeholders)
    greet = greet.Replace($"{{{ph.placeholder}}}", ph.value);
  using System.Text.RegularExpressions;

  ...

  // All possible substitutions (from database?)
  Dictionary<string, string> replacements = 
    new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase) {
      { "name", "name1"},
      { "country", "country1"},
  };

  string greet = "Hi {name}, Are you from {country}";

  string result = Regex.Replace(
      greet,
    @"(?<=\{).*?(?=\})",
      match => replacements.TryGetValue(match.Value, out var value) ? value : "???");