【问题标题】:How can I check the validation of the LCID without try\catch block?如何在没有 try\catch 块的情况下检查 LCID 的验证?
【发布时间】:2015-04-27 07:28:27
【问题描述】:

有些类型有TryParse方法,例如Int32Int64Boolean等。它允许在没有try\catch块的情况下检查字符串值。当一个循环中处理许多不正确的值时,它对生产率的影响很大。我需要对 LCID 的字符串值执行相同的操作。但是CultureInfo 类没有TryParse 方法。

CultureInfo culture = null;
try {
  culture = CultureInfo.GetCultureInfo(Convert.ToInt32(lcid, 16));
}
catch {
}

如何重写这段代码?

【问题讨论】:

  • 这段代码有什么问题吗?如果框架提供了这样的方法,它仍然需要尝试/捕获。如果您担心代码的简洁性,那么您可以在字符串类型上创建一个扩展方法。
  • 不,我不关心代码的简洁性。但是当一个循环中处理许多不正确的值时,它对生产率的影响很大。在这里,我展示了一些关于比较try\catch 变体和TryGetObjectId 的结果(这是TryParse 的一些类比):sites.google.com/site/bushmansnetlaboratory/sendbox/stati/… 00:05:30,4050567 和 00:00:00,7027717。生产力差异很大。

标签: c# .net cultureinfo lcid


【解决方案1】:

您可以通过 LCID 在字典中缓存所有 CultureInfo 对象:

var culturesByLcid = CultureInfo
    .GetCultures(CultureTypes.AllCultures)
    .ToDictionary(c => c.LCID, c => c);

并使用 TryGetValue 像:

CultureInfo found;
if (culturesByLcid.TryGetValue(lcid, out found))
{
    ...
}

【讨论】:

    猜你喜欢
    • 2016-08-18
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多