带有命名参数的参数化字符串语法

时间:2015-01-06 15:20:35

标签: c# named-parameters

我正在编写一个C#应用程序。我将其定位到.NET 4.5.1。

我的应用程序中有一个翻译服务,其中翻译的字符串存储在数据库中。字符串可以包含任意类型的任意数量的参数。

string formatString = GetFormatStringFromDB();

Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();

var result = Format(formatString, parameters);

Composite Formatting语法看起来像是一个理想的候选者。

像:

string formatString = "{0} is married to {1}, and they have a child of age {2}"; // note that this should still come from the DB

Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();

var result = string.Format(formatString, parameters.Select(o => o.Value)); // I might need to convert this to an array.

这个

的问题是什么

我想要命名参数。我不想用数字索引识别参数:它不具有描述性,我很可能会在翻译中混淆/混淆它们。

我想要什么

我可以用以下名称表示参数的语法:

string formatString = "{wife} is married to {husband}, and they have a child of age {childAge}";

嘿,这看起来类似于C#vNext中的新String Interpolation语法!我可以使用它吗?

没有

  1. 它是一个vNext功能,我需要.NET 4.5.1的解决方案。
  2. 它甚至不是我需要的。它仅适用于内联字符串,其中已经可用的参数会自动替换。它无法存储,稍后会针对不同的参数集进行评估。使用新的FormattedString类似乎让我感到困惑,但它可能是一个解决方案,虽然我需要将它移植回当前的.NET,我需要一些帮助(并且还需要正确使用它) )。
  3. 使用复合格式也可以格式化日期时间或类似:"birthday: {0:d}"的int。它对翻译非常有用,因为不同的语言和文化倾向于以完全不同的格式表示这些。我不想失去这种功能。

    我要求的是

    我可以使用的语法。一些函数将参数提供给字符串并获得结果。

    像:

    string formatString = GetFormatStringFromDB();
    // "Age: {age}, Birthday: {birthday:d}"
    
    Dictionary<string,object> parameters = GetNamedParametersFromSomewhere();
    // { "age": (int)10, "birthday": (DateTime)1988-01-01 }
    
    var result = myOwnFormat(formatString, parameters);
    //result should be "Age: 10, Birthday: 12/30/2011"
    

    我应该使用自己的语法和解析器吗?有类似的东西已经实施了吗?

    修改

    我更好地(有希望地)重写了描述问题的整个问题,指出了我的要求。

0 个答案:

没有答案