哟!我知道这是一种习惯,主要是在Drupal中。如果这是重复的话我很抱歉(无法用我自己的意思找到它)。
我有一系列用于本地化的资源文件。在Drupal中,有一些名为令牌的东西,它是一些带图案的文本,当它被调用时它被服务器取代。
示例:
英文资源文件:
“我的英文资源文件中有本地化文本,我想向$ [user]显示其工作原理。”
西班牙语资源文件:
“Yo tengo este texto localizado en el archivo de recursosenespañolyquisieraenseñarleal$ [user]cómoestofunciona。”
然后,经过一些解析后,我会用正确的细节替换令牌。
我目前的做法如下:
public class LocalizationParser
{
private Dictionary<string, dynamic> Tokens { get; set; }
public LocalizationParser()
{
Tokens = new Dictionary<string, dynamic>();
Tokens.Add("$[user]", HttpContext.Current.User.Identity.Name);
}
public string ParseResource(string text)
{
foreach(var token in Tokens)
{
text.Replace(token.Key, token.Value);
}
return text;
}
}
我知道我遇到了一个巨大的问题,即我将填充所有这些值,并且会产生不必要的性能影响。我知道如果我可以调用一个方法,只有找到字典键才能检索正确的值,那么就不会有巨大的开销。
在c#中执行此操作的正确方法是什么? (目前使用带有EF 6.1的ASP.NET MVC 5)
答案 0 :(得分:2)
这是一个假设或事实,您可以使用dotTrace等分析器确定瓶颈的数字备份吗?此外,了解您期望拥有多少令牌也很有用。
在任何情况下,替换都可以。您可以使用Hashtable并使用Exists方法结合正则表达式来获取令牌,然后执行查找。
请记住,字符串是不可变的,因此每次替换都意味着一个副本,如果在任何时候完成,可能会很慢。
要多次修改字符串,请使用StringBuilder。
该过程已完整记录: https://msdn.microsoft.com/en-us/library/2839d5h5(v=vs.110).aspx