c# - 在 C# 中使用动态 "binding expression"格式化字符串

标签 c# .net

我认为这很像 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 上执行此操作。

以下是我提出的想法以及其中存在的问题

  1. WPF/XAML。这是我不关心的大量开销。我只想格式化字符串
  2. 罗斯林。这要求我将格式表达式编写为有效的 C#。这也是一项繁重的工作。
  3. 可格式化字符串/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/

相关文章:

c# - 向 REST 响应添加验证信息

c# - 无法在服务器上激活二进制 http 绑定(bind)

c# - 比较两个对象的属性以找出差异?

.net - 有机会合法投吗?

c# - 日期时间 : how to display as DD. MM.YYYY?

c# - 如何使用 C# 中的绑定(bind)源过滤从特定日期到特定日期的数据表?

c# - 比较两个列表并返回不匹配的项目结果错误

c# - 布局类似于 Windows 8 中的天气应用程序

c# - 加密 QRCode 有效负载,输入长度与输出长度相同

c# - System.Activator.CreateInstance 的问题