【问题标题】:Issue in capitalizing first letter of first name and last name名字和姓氏的第一个字母大写的问题
【发布时间】:2014-08-21 00:17:08
【问题描述】:

我正在尝试将名字、中间名和姓氏的第一个字母大写。
我正在尝试使用 System.Globalization.TextInfo.ToTitleCase(newUser.Firstname) 但我在 Visual Studio 中收到错误消息“非静态字段需要对象引用,方法或属性”。帮我解决这个问题:

public static UserAccount CreateUser(string firstName, string middleName, string lastName, string nameSuffix, int yearOfBirth, int? monthOfBirth, int? dayOfBirth, string email, string password, UserRole roles, bool tosAccepted = false)
{
    var newUser = new UserAccount
    {
        CreationDate = DateTime.Now,
        ActivationCode = Guid.NewGuid(),
        FirstName = firstName,
        MiddleName = middleName,
        LastName = lastName,
        NameSuffix = nameSuffix,
        YearOfBirth = yearOfBirth,
        MonthOfBirth = monthOfBirth,
        DayOfBirth = dayOfBirth,
        Email = email,
        UserRoles = roles,
        ToSAccepted = tosAccepted
    };
    string newUsers= System.Globalization.TextInfo.ToTitleCase(newUser.FirstName);
    newUser.SetPassword(password);
    return newUser;
}

【问题讨论】:

标签: c# .net web


【解决方案1】:

您可以调用CultureInfo.CurrentCulture.TextInfo.ToTitleCase 方法为您执行此操作:

CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lastName)

【讨论】:

    【解决方案2】:

    ToTitleCase 是一个实例方法,因此您必须通过引用TextInfo 的实例来调用它。您可以像这样从当前线程的文化中获取TextInfo 的实例:

    var textInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo;
    

    或者来自像这样的特定文化:

    var textInfo = new CultureInfo("en-US",false).TextInfo;
    

    此外,它会返回一个新字符串,而不是修改您传入的字符串。请尝试以下操作:

    public static UserAccount CreateUser(string firstName, string middleName, string lastName, string nameSuffix, int yearOfBirth, int? monthOfBirth, int? dayOfBirth, string email, string password, UserRole roles, bool tosAccepted = false)
    {
        var textInfo = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo;
    
        var newUser = new UserAccount
        {
            CreationDate = DateTime.Now,
            ActivationCode = Guid.NewGuid(),
            FirstName = textInfo.ToTitleCase(firstName),
            MiddleName = middleName,
            LastName = textInfo.ToTitleCase(lastName),
            NameSuffix = nameSuffix,
            YearOfBirth = yearOfBirth,
            MonthOfBirth = monthOfBirth,
            DayOfBirth = dayOfBirth,
            Email = email,
            UserRoles = roles,
            ToSAccepted = tosAccepted
        };
        newUser.SetPassword(password);
        return newUser;
    }
    

    【讨论】:

    • 如果字段中只输入一个字母,我需要在中间首字母后添加句点怎么办?我还能用类似的东西吗
    • @NitinJaitely 在这种情况下,您可以使用类似于MiddleName = middleName + (middleName.Length == 1 ? "." : "") 的东西—?…:conditional operator
    猜你喜欢
    • 2023-03-31
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多