如何创建更加用户友好的 string.format 语法?

2023-12-01

我需要在程序中创建一个很长的字符串,并且一直在使用String.Format。我面临的问题是当参数超过 8-10 个时跟踪所有数字。

是否可以创建某种形式的重载来接受与此类似的语法?

String.Format("You are {age} years old and your last name is {name} ",
{age = "18", name = "Foo"});

下面的例子怎么样,它既适用于匿名类型(下面的示例),也适用于常规类型(域实体等):

static void Main()
{
    string s = Format("You are {age} years old and your last name is {name} ",
        new {age = 18, name = "Foo"});
}

using:

static readonly Regex rePattern = new Regex(
    @"(\{+)([^\}]+)(\}+)", RegexOptions.Compiled);
static string Format(string pattern, object template)
{
    if (template == null) throw new ArgumentNullException();
    Type type = template.GetType();
    var cache = new Dictionary<string, string>();
    return rePattern.Replace(pattern, match =>
    {
        int lCount = match.Groups[1].Value.Length,
            rCount = match.Groups[3].Value.Length;
        if ((lCount % 2) != (rCount % 2)) throw new InvalidOperationException("Unbalanced braces");
        string lBrace = lCount == 1 ? "" : new string('{', lCount / 2),
            rBrace = rCount == 1 ? "" : new string('}', rCount / 2);

        string key = match.Groups[2].Value, value;
        if(lCount % 2 == 0) {
            value = key;
        } else {
            if (!cache.TryGetValue(key, out value))
            {
                var prop = type.GetProperty(key);
                if (prop == null)
                {
                    throw new ArgumentException("Not found: " + key, "pattern");
                }
                value = Convert.ToString(prop.GetValue(template, null));
                cache.Add(key, value);
            }
        }
        return lBrace + value + rBrace;
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建更加用户友好的 string.format 语法? 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • shell中如何分割字符串

    我有一个变量作为 string ABC400p2q4 我怎样才能分开ABC400 and p2q4 我需要将它分成两个变量 结果我得到 echo var1 ABC400 echo var2 p2q4 可以用任何字母字符代替 ABC 可以用任
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的

随机推荐

  • Typescript 版本不更新

    我正在运行以下命令将 TypeScript 版本从 1 8 5 更新到 2 0 7 npm install g 打字稿 它显示为 电子邮件受保护 之后 当我尝试使用以下命令手动检查它时 tsc 版本 它告诉我 版本1 8 5 请告诉我如何将
  • 未找到“Jenssegers\Mongodb\MongodbServiceProvider”类

    我想用https github com jenssegers laravel mongodb为了使用 laravel 5 连接到 Mongodb 我已经安装了 MongoDB php 驱动程序 然后使用命令安装了 laravel mongo
  • R 中的多重 T 检验

    我的矩阵中有 94 个变量 样本 蛋白质 组 和 172 个观察值 Sample Protein1 Protein2 Protein92 Group 1 1 53 3 325 5 63 0 2 2 32 3 451 6 32 0 103 3
  • Android如何在具有图像视图和文本视图的圆形中创建这样的视图

    i want to create a view like this i have posted in screen shot in circle shape of layout with one image view with some b
  • vb 2008 网络浏览器替代品

    你好 我正在使用Visual Basic 2008 Express是否还有其他网络浏览器 例如gekoWebBrowser 但文件较少 或者是否可以更改 Visual Basic 使用的默认浏览器 从 IE 到 Opera chrome f
  • 通过 ssms 远程运行时,SSIS 作业失败,但在 SQL Server 上运行良好

    在开发盒上安装了 SQL Server 2016 并带有 SSIS 拥有一个循环遍历目录并验证 XML 文件的包 当在 SQL Server 上执行时 该作业可以通过 Integration Services 目录和 SQL Server
  • Python __getattr__ 执行多次

    我一直在努力实施 getattr 函数如下例所示 PEP 562 模块 getattr and dir 我不明白为什么这段简单的代码 lib py def getattr name print name main py from lib i
  • 在 Firebase 客户端应用程序中实现可调用的云函数

    我最近发现了Firebase 可调用函数这允许我从客户端调用类似 HTTPS 触发器的函数 并且具有 auth 支持 我很难在现有的 Firebase Web 客户端应用程序中实现这一新功能 我正在运行一些云函数 其中有一些我想将其转换为
  • 连接计算日期之间值的表

    所以我有下面两个表 Table A Date num 01 16 15 10 02 20 15 12 03 20 15 13 Table B Date Value 01 02 15 100 01 03 15 101 01 17 15 102
  • C# SMO 和 SqlEnum 引用错误

    我正在做一个 C 项目VS2013正在使用smo目的 我安装了 Install Package Microsoft SqlServer Scripting Install Package Microsoft SqlServer SqlEnu
  • Azure服务总线:如何续订锁定?

    如何更新接收队列消息处理程序上的锁 在事件处理程序上 测试消息没有更新锁定属性 Message testMessage https learn microsoft com en us dotnet api microsoft service
  • R Shiny:保留旧输出

    在闪亮的应用程序中 有没有办法保留旧的反应输出并将其与新的反应输出一起显示在应用程序中 举个例子 假设我想显示线性模型的汇总表 我逐渐向其中添加更多变量 我目前有一个checkboxGroupInput我使用该面板选择要包含在模型中的解释变
  • 字节算术:如何减去字节变量? [复制]

    这个问题在这里已经有答案了 当我尝试执行以下操作时出现错误 byte a 23 a a 1 编译器给出这个错误 Test java 8 发现可能存在精度损失 需要 int 字节 a a 1 1 个错误 铸造并不能解决错误 为什么编译器不让我
  • jq 的意外循环

    我正在尝试将 bash 中的表从 json 打印到标准输出jq key name doc count 1000 values over time buckets key as string 2019 05 01 11 00 00 000 k
  • Python:获取和保存屏幕截图的最快方法

    我一直在努力想出一个脚本 让我每秒可以多次截取桌面屏幕截图 我用的是Win10 PIL from PIL import ImageGrab import time while True im ImageGrab grab fname dro
  • 使用 Gmail 从 Excel 发送电子邮件

    我正在尝试在保存工作簿后自动生成电子邮件 我不想在电子邮件中发送工作簿 只是向一组人员发送电子邮件通知 告知其中有一个新条目 因此他们实际上必须打开它并做出响应 如果我可以添加指向该条目位置的链接 可以使用的电子表格 此外 该工作簿是 共享
  • Flutter 从 Firebase Cloud Firestore 返回完整数组

    9 月 2 日最新编辑 即使有赏金 我对此也没有太大的兴趣 所以我会尝试问一个更简单 更具体的问题 因此 我根据下面 Doug 的建议重新组织了数据库 因为我无法在 firebase 中以任何方式引用数组 所以现在我有了一个数组的映射 而不
  • 有些手机需要 READ_CONTACTS 权限才能从联系人选择器中读取

    我有一个HTC ONE M7 GPE 4 2 2 和HTC EVO 3D 4 0 3 HTC Sense 3 6 HTC ONE不需要
  • 如何在不使用任何插件的情况下添加 2 个音调图标?

    我不想只为我的应用程序中的一个图标添加任何插件 但我需要两种色调 因为背景颜色会有所不同 我不知道什么时候会变暗 什么时候会变亮 我的意思是像这样的图标 https material io tools icons style twotone
  • 如何创建更加用户友好的 string.format 语法?

    我需要在程序中创建一个很长的字符串 并且一直在使用String Format 我面临的问题是当参数超过 8 10 个时跟踪所有数字 是否可以创建某种形式的重载来接受与此类似的语法 String Format You are age year