gpt4 book ai didi

c# - C# 中的内联 'try' 语句可能吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:28 27 4
gpt4 key购买 nike

是否有可能以某种方式在 C# 中调用内联 try 语句?

我正在为我的网站检测语言,有时,当客户端的语言由于某种原因类似于 en-GR 时,.NET 会抛出异常。所以我需要使用 trycatch,即使我没有真正捕捉到任何东西。

在这种情况下,这似乎完全矫枉过正。

// Set allowed languages
string[] allowedLanguages = { "en", "fr", "ru" };

// Get all possible values
var routeLanguage = (filterContext.RouteData.Values["lang"] != null && allowedLanguages.Contains(filterContext.RouteData.Values["lang"].ToString())) ? filterContext.RouteData.Values["lang"].ToString() : null;
var cookieLanguage = (filterContext.HttpContext.Request.Cookies["lang"] != null && allowedLanguages.Contains(filterContext.HttpContext.Request.Cookies["lang"].Value)) ? filterContext.HttpContext.Request.Cookies["lang"].Value : null;
string clientLanguage = null;
try
{
clientLanguage = (filterContext.HttpContext.Request.UserLanguages != null) ? new CultureInfo(filterContext.HttpContext.Request.UserLanguages[0]).TwoLetterISOLanguageName : null; // Exception sometimes without `try`
}
catch (Exception)
{
}

编辑

异常不是我可以修复的,因为我无法控制用户在他的文化信息中有什么。 .NET 只是将 en-FR 视为无效的。

最佳答案

首先,最好首先弄清楚如何避免异常。首先专注于此。抛出该异常是有原因的,如果您可以确定它是什么,那么就不要那样做。

要真正回答您的问题:没有开箱即用的“吃掉此表达式中的所有异常”机制,但构建您自己的机制很简单:

static T EatExceptions(Func<T> func)
{
try { return func(); } catch { }
return default(T);
}
...
clientLanguage = (filterContext.HttpContext.Request.UserLanguages != null) ?
EatExceptions(() => new CultureInfo(filterContext.HttpContext.Request.UserLanguages[0]).TwoLetterISOLanguageName) :
null; }

如果有人试图在我正在审查的代码中使用这样的恶作剧,那么我会......好吧,我们只能说更改不会被 checkin 。99% 的情况下,像这样吃掉异常是一个非常糟糕的主意。重申一遍:找出你做错了什么并停止做。不要做错事然后处理失败。

关于c# - C# 中的内联 'try' 语句可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com