2
\$\begingroup\$

Users can have a Cookie called lang that contains either the value "default=1" (English) or "default=2" (French). This cookie is used to determine their preferred language. I have a function that needs to take the cookie and return the language has an Enum. If the cookie doesn't exist, I want to return English. I cannot change the cookie value.

Language enum:

 Public Enum Language Undefined = 0 English = 1 French = 2 End Enum 

Function:

 Public Function GetLangFromCookie() As Language If HttpContext.Current.Request.Cookies.Get("lang") IsNot Nothing Then Dim langCookie = HttpContext.Current.Request.Cookies.Get("lang").Value Return If(langCookie(langCookie.Length - 1) = "1", Language.English, Language.French) End If Return Language.English End Function 

I feel like this is not efficient and not secure but I don't know how to improve it. Any suggestions?

\$\endgroup\$

    1 Answer 1

    1
    \$\begingroup\$
    • You query HttpContext.Current.Request.Cookies.Get("lang") twice. Access it once and store it in a variable.
    • You will get a problem if in the future you have to support more than 9 languages. Instead of accessing the last char from langCookie you should Split()langCookie by = and take the second array element. You can then use [Enum].TryParse() to get the enum.
    • Some horizontal spacing (new lines) would help to easier read the code.

    Your code could look like so

    Public Function GetLangFromCookie() As Language Dim langCookie = HttpContext.Current.Request.Cookies.Get("lang") If langCookie Is Nothing Then Return Language.English Else Return GetLanguage(langCookie.Value) End If End Function Private Function GetLanguage(languageCookieValue As String) As Language Dim splittetCookieValue As String() = languageCookieValue.Split(New String() {"="}, StringSplitOptions.RemoveEmptyEntries) Dim languageIdentifier As String = splittetCookieValue.LastOrDefault() Dim foundLanguage As Language ' We don't care about the success of the TryParse() call [Enum].TryParse(Of Language)(languageIdentifier, foundLanguage) ' because foundLanguage will be 0 if it doesn't succeed and will be checked here Return If(foundLanguage = Language.Undefined, Language.English, foundLanguage) End Function 
    \$\endgroup\$

      Start asking to get answers

      Find the answer to your question by asking.

      Ask question

      Explore related questions

      See similar questions with these tags.