C# 使用字符串插值时是否可以混合字符串资源?

C# 使用字符串插值时是否可以混合字符串资源?,c#,visual-studio,winforms,C#,Visual Studio,Winforms,我正在重构一些代码,其中一项任务是将硬编码字符串放入资源中。我在代码中有以下字符串: var s = $"Last Updated: {DateTime.Now}"; 那么现在如何将这个字符串提取到资源中呢。目前,我认为只有这样才有可能: var s = string.Format(MyStrings.LastUpdated, DateTime.Now); 其中,MyStrings.LastUpdated将是: Last Updated: {0} 这是唯一的方法还是有更

我正在重构一些代码,其中一项任务是将硬编码字符串放入资源中。我在代码中有以下字符串:

var s = $"Last Updated: {DateTime.Now}";
那么现在如何将这个字符串提取到资源中呢。目前,我认为只有这样才有可能:

var s = string.Format(MyStrings.LastUpdated, DateTime.Now);
其中,
MyStrings.LastUpdated
将是:

Last Updated: {0}
这是唯一的方法还是有更新的方法

$special字符将字符串文字标识为插值字符串。插值字符串是可能包含插值表达式的字符串文字。将插值字符串解析为结果字符串时,带有插值表达式的项将替换为表达式结果的字符串表示形式

正如使用
$
进行字符串插值的语言中所述,运算符标识字符串文字,因此不能将资源或变量用于格式字符串本身

提取格式字符串并使用
string.format
对其进行格式化是一种合理的方法。不过,您应该记住,这些格式字符串可能包含涉及名称或数字以及其他格式说明符的复杂表达式。因此,您应该谨慎地告知翻译人员不要更改或删除它们,否则您的应用程序可能会显示意外行为。一方面,这可能会带来不便,但另一方面,如果您将格式字符串中的表达式与可本地化的资源分离并自行连接,则只能保护它们不被修改,这是不可行的

$special字符将字符串文字标识为插值字符串。插值字符串是可能包含插值表达式的字符串文字。将插值字符串解析为结果字符串时,带有插值表达式的项将替换为表达式结果的字符串表示形式

正如使用
$
进行字符串插值的语言中所述,运算符标识字符串文字,因此不能将资源或变量用于格式字符串本身


提取格式字符串并使用
string.format
对其进行格式化是一种合理的方法。不过,您应该记住,这些格式字符串可能包含涉及名称或数字以及其他格式说明符的复杂表达式。因此,您应该谨慎地告知翻译人员不要更改或删除它们,否则您的应用程序可能会显示意外行为。一方面,这可能会带来不便,但另一方面,如果您将格式字符串中的表达式与可本地化的资源分开并自行连接,则只能保护其不受修改,这是不可行的。

您需要有占位符,以便输出另一个字符串。使用
{0}
与其他方法一样好。在您的示例中,您只需连接字符串,但占位符可以位于任何位置。不是选项。相关:。您需要使用FormattableString,但我还没有在参考资料中使用它。考虑到这一点,最好将其更改为带有“{0}”的“传统”形式。否则,您的翻译人员将需要知道变量名,而他对此一无所知。当您更改变量名时(例如,它有一个输入错误),没有人会注意到现在的翻译失败。您需要有一个占位符来输出另一个字符串。使用
{0}
与其他方法一样好。在您的示例中,您只需连接字符串,但占位符可以位于任何位置。不是选项。相关:。您需要使用FormattableString,但我还没有在参考资料中使用它。考虑到这一点,最好将其更改为带有“{0}”的“传统”形式。否则,您的翻译人员将需要知道变量名,而他对此一无所知。当您更改变量名(即,它有一个输入错误)时,没有人会注意到现在的翻译失败。