HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpMinor

Title case name when first, middle and last are all upper or lower case

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
caselastallarelowerandfirstnamewhentitle

Problem

This code works, but I get the feeling that it could be shorter and simpler. Any ideas?

```
private void CheckNameCase(Models.PersonalInformationModels.PersonalInformationModel model)
{
// if first middle and last names are all upper or lower case then title case the name

//Name

string firstName = model.NameModel.FirstName;
string upperFirstName;
string lowerFirstName;
if (firstName == null)
{
upperFirstName = null;
lowerFirstName = null;
}
else
{
upperFirstName = model.NameModel.FirstName.ToUpper(new CultureInfo("en-US", false));
lowerFirstName = model.NameModel.FirstName.ToLower(new CultureInfo("en-US", false));
}

string middleName = model.NameModel.MiddleName;
string upperMiddleName;
string lowerMiddleName;
if (middleName == null)
{
upperMiddleName = null;
lowerMiddleName = null;
}
else
{
upperMiddleName = model.NameModel.MiddleName.ToUpper(new CultureInfo("en-US", false));
lowerMiddleName = model.NameModel.MiddleName.ToLower(new CultureInfo("en-US", false));
}
string lastName = model.NameModel.LastName;
string upperLastName;
string lowerLastName;
if (lastName == null)
{
upperLastName = null;
lowerLastName = null;
} else
{
upperLastName = model.NameModel.LastName.ToUpper(new CultureInfo("en-US", false));
lowerLastName = model.NameModel.LastName.ToLower(new CultureInfo("en-US", false));
}

if ((firstName == upperFirstName || firstName == lowerFirstName) && (middleName == upperMiddleName || middleName == lowerMiddleName) && (lastName == upperLastName || lastName == lowerLastName))
{
if(!String.IsNullOrEmpty(model.NameModel.FirstName)){ model.NameModel.FirstName = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(firstName.ToLower(new CultureInfo("en-US", false))); }
if(!St

Solution

Good layout and spacing.

My first observation is that you are repeating yourself many times over. If you look closely, all of the checks are the same. If you find duplicate code, move them out into a function.

Second observation is you are coding lengthy namespaces. Learn about the using ; syntax at the top of your file. Will save tonnes of tracing through.

Also try to avoid nesting if statements. Nested if's really clutter up the code and make it hard to follow.

Here is they way I'd clean up up:

private class UpperAndLowerString
{
    public string UpperCase { get; set; }
    public string LowerCase { get; set; }

    public UpperAndLowerString(string name)
    {
        UpperCase = name == null ? null : name.ToUpper(new CultureInfo("en-US", false));
        LowerCase = name == null ? null : name.ToLower(new CultureInfo("en-US", false));
    }

    public bool EqualsUpperCase(string check)
    {
        return UpperCase == check;
    }

    public bool EqualsLowerCase(string check)
    {
        return LowerCase == check;
    }

    public bool Equals(string check)
    {
        return EqualsUpperCase(check) || EqualsLowerCase(check);
    }
}

private static string ConvertToTitleCase(string name)
{
    return string.IsNullOrEmpty(name) ? null : TextInfo.ToTitleCase(name);
}

private static string ProcessSingleName(string name)
{
    var casedName = new UpperAndLowerString(name);

    return casedName.Equals(name) ? ConvertToTitleCase(name) : name;
}

private void CheckNameCase(Models.PersonalInformationModels.PersonalInformationModel model)
{
    model.NameModel.FirstName = ProcessSingleName(model.NameModel.FirstName) ?? model.NameModel.FirstName;
    model.NameModel.MiddleName = ProcessSingleName(model.NameModel.MiddleName) ?? model.NameModel.MiddleName;
    model.NameModel.LastName = ProcessSingleName(model.NameModel.LastName) ?? model.NameModel.LastName ;

    model.AlternateNameModel.FirstName = ProcessSingleName(model.AlternateNameModel.FirstName) ?? model.AlternateNameModel.FirstName;
    model.AlternateNameModel.MiddleName = ProcessSingleName(model.AlternateNameModel.MiddleName) ?? model.AlternateNameModel.MiddleName;
    model.AlternateNameModel.LastName = ProcessSingleName(model.AlternateNameModel.LastName) ?? model.AlternateNameModel.LastName;

}

Code Snippets

private class UpperAndLowerString
{
    public string UpperCase { get; set; }
    public string LowerCase { get; set; }

    public UpperAndLowerString(string name)
    {
        UpperCase = name == null ? null : name.ToUpper(new CultureInfo("en-US", false));
        LowerCase = name == null ? null : name.ToLower(new CultureInfo("en-US", false));
    }

    public bool EqualsUpperCase(string check)
    {
        return UpperCase == check;
    }

    public bool EqualsLowerCase(string check)
    {
        return LowerCase == check;
    }

    public bool Equals(string check)
    {
        return EqualsUpperCase(check) || EqualsLowerCase(check);
    }
}

private static string ConvertToTitleCase(string name)
{
    return string.IsNullOrEmpty(name) ? null : TextInfo.ToTitleCase(name);
}


private static string ProcessSingleName(string name)
{
    var casedName = new UpperAndLowerString(name);

    return casedName.Equals(name) ? ConvertToTitleCase(name) : name;
}

private void CheckNameCase(Models.PersonalInformationModels.PersonalInformationModel model)
{
    model.NameModel.FirstName = ProcessSingleName(model.NameModel.FirstName) ?? model.NameModel.FirstName;
    model.NameModel.MiddleName = ProcessSingleName(model.NameModel.MiddleName) ?? model.NameModel.MiddleName;
    model.NameModel.LastName = ProcessSingleName(model.NameModel.LastName) ?? model.NameModel.LastName ;

    model.AlternateNameModel.FirstName = ProcessSingleName(model.AlternateNameModel.FirstName) ?? model.AlternateNameModel.FirstName;
    model.AlternateNameModel.MiddleName = ProcessSingleName(model.AlternateNameModel.MiddleName) ?? model.AlternateNameModel.MiddleName;
    model.AlternateNameModel.LastName = ProcessSingleName(model.AlternateNameModel.LastName) ?? model.AlternateNameModel.LastName;

}

Context

StackExchange Code Review Q#15148, answer score: 6

Revisions (0)

No revisions yet.