c# - C# 中具有可变内容的字符串插值

标签 c# .net

能否将字符串模板存储在变量中并对其进行插值?

var name = "Joe";
var template = "Hi {name}";

然后我想做类似的事情:

var result = $template;

原因是我的模板将来自数据库。

最佳答案

我猜这些字符串将始终具有相同数量的参数,即使它们可以更改。例如,今天的 template"Hi {name}",明天可能是 "Hello {name}"

简短的回答:不,你不能做你提议的事情。

备选方案 1:使用 string.Format方法。

你可以在你的数据库中存储这样的东西:

"Hi {0}"

然后,当您从数据库中检索字符串模板时,您可以这样写:

var template = "Hi {0}"; //retrieved from db
var name = "Joe";
var result = string.Format(template, name);
//now result is "Hi Joe"

有两个参数:

var name2a = "Mike";
var name2b = "John";
var template2 = "Hi {0} and {1}!"; //retrieved from db
var result2 = string.Format(template2, name2a, name2b);
//now result2 is "Hi Mike and John!"

备选方案 2:使用占位符。

你可以在你的数据库中存储这样的东西:

"Hi {name}"

然后,当您从数据库中检索字符串模板时,您可以这样写:

var template = "Hi {name}"; //retrieved from db
var name = "Joe";
var result = template.Replace("{name}", name);
//now result is "Hi Joe"

有 3 个参数:

var name2a = "Mike";
var name2b = "John";
var template2 = "Hi {name2a} and {name2b}!"; //retrieved from db
var result2 = template2
    .Replace("{name2a}", name2a)
    .Replace("{name2b}", name2b);
//now result2 is "Hi Mike and John!"

注意您为占位符选择的标记。在这里,我使用了大括号 {}。您应该找到不太可能与文本的其余部分发生冲突的内容。这完全取决于您的上下文。

关于c# - C# 中具有可变内容的字符串插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43288857/

相关文章:

c# - Orleans 7.0 序列化程序无法与源自 Nuget 包的 POCO 一起使用

C# - 通过串行端口从设备获取所有数据并检测控制字符(ACK、SOH、...)

c# - 使用数据绑定(bind)在 asp.net 中使用 optgroup 元素填充 HtmlSelect

c# - C#软件包Tyrrrz/YoutubeExplode对于YouTube html5视频返回错误403,但对于Flash视频则不返回错误403

.net 数据加密?使用哪些类?

c# - Microsoft.AspNetCore.Hosting 的 System.BadImageFormatException

c# - 从 Unity 中的 Tilemap 获取邻居

c# - 使用 Task.WaitAny() 获取完成的任务 ID

.net - MSBuild使用项目引用正确构建项目,但不能从解决方案中构建项目

c# - 在一次调用中从多个表中进行选择