首页 >后端开发 >C++ >如何在 C# 中实现命名字符串格式化?

如何在 C# 中实现命名字符串格式化?

Linda Hamilton
Linda Hamilton原创
2025-01-03 15:44:40249浏览

How Can I Achieve Named String Formatting in C#?

C# 中的命名字符串格式化

在 Python 等编程语言中,您可以按名称而不是位置格式化字符串。例如,您可以有这样的字符串:

print '%(language)s has %(#)03d quote types.' % \
      {'language': "Python", "#": 2}

这将打印“Python has 002 quote types.”

在 C# 中,没有用于格式化字符串的内置方法按名字。但是,有几种方法可以实现类似的结果。

使用字典

一种选择是使用字典将变量名称映射到其值。然后,您可以将字典传递给自定义字符串格式化方法,该方法使用变量名称来格式化字符串。

这是一个示例:

public static string FormatStringByName(string format, Dictionary<string, object> values)
{
    // Create a regular expression to match variable names in the format string.
    var regex = new Regex(@"\{(.*?)\}");

    // Replace each variable name with its value from the dictionary.
    var formattedString = regex.Replace(format, match => values[match.Groups[1].Value].ToString());

    return formattedString;
}

您可以像这样使用此方法:

var values = new Dictionary<string, object>
{
    { "some_variable", "hello" },
    { "some_other_variable", "world" }
};

string formattedString = FormatStringByName("{some_variable}: {some_other_variable}", values);

使用字符串插值

中C# 6.0 及更高版本,您可以使用字符串插值按名称格式化字符串。字符串插值是一项功能,允许您将表达式直接嵌入到字符串中。

这里是一个示例:

string formattedString = $"{some_variable}: {some_other_variable}";

这将打印“hello: world”。

扩展方法

另一种选择是使用扩展方法来添加命名字符串格式化功能到字符串类。以下是您可以使用的扩展方法的示例:

public static class StringExtensions
{
    public static string FormatByName(this string format, object values)
    {
        // Get the type of the values object.
        var type = values.GetType();

        // Get the properties of the values object.
        var properties = type.GetProperties();

        // Create a regular expression to match variable names in the format string.
        var regex = new Regex(@"\{(.*?)\}");

        // Replace each variable name with its value from the values object.
        var formattedString = regex.Replace(format, match =>
        {
            var property = properties.FirstOrDefault(p => p.Name == match.Groups[1].Value);
            if (property != null)
            {
                return property.GetValue(values).ToString();
            }
            else
            {
                return match.Groups[1].Value;
            }
        });

        return formattedString;
    }
}

您可以像这样使用此扩展方法:

string formattedString = "{some_variable}: {some_other_variable}".FormatByName(new { some_variable = "hello", some_other_variable = "world" });

以上是如何在 C# 中实现命名字符串格式化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn