我认为这很像 AngularJS 中的 MVVM 单向绑定(bind)。我有一个对象(一个“模型”),它有一些属性和一些方法 - 就像
{
"firstName": "John",
"lastName": "Doe",
"random": () => Random.Next(),
"formatDate": (fmt, value) => new DateTime(value).ToString(fmt)
}
我想定义一个格式字符串,它可以访问模型中的值或从中调用方法并返回格式化字符串。在 AngularJS 中我会使用这样的表达式
Hello {firstName} {lastName}. Today is {formatDate('d', new Date())}.
有没有办法在 C# (.NET 5) 中执行类似的操作?我希望在 string
上执行此操作。
以下是我提出的想法以及其中存在的问题
- WPF/XAML。这是我不关心的大量开销。我只想格式化
字符串
。 - 罗斯林。这要求我将格式表达式编写为有效的 C#。这也是一项繁重的工作。
- 可格式化字符串/ICustomFormatter。它不支持传递动态模型或方法调用。
编辑
这是调用代码的示例
var formatString = person.Tenant.WelcomeMessageFormat;
var model = new
{
FirstName = person.FirstName,
LastName = person.LastName,
Random = () => Random.Next(),
FormatDate = (fmt, value) => new DateTime(value).ToString(fmt)
};
var message = ParseFormatString(formatString, model);
SendMessage(message);
// .....
public string ParseFormatString(string format, object model)
{
// what goes here?
}
最佳答案
您正在寻找模板库吗?这似乎就是你所描述的。 这是来自网络的示例 http://r3c.github.io/cottle/
关于c# - 在 C# 中使用动态 "binding expression"格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73785230/