在MVC辅助方法中打印每个单词的第一个字母[重复]

Posted

技术标签:

【中文标题】在MVC辅助方法中打印每个单词的第一个字母[重复]【英文标题】:Print first letter of every word in MVC helper method [duplicate] 【发布时间】:2019-01-27 12:58:54 【问题描述】:

我在一个 MVC 视图上有这个帮助方法,它返回用户的名字和姓氏(Windows autheticated 应用程序)

@helper AccountName()

    using (var context = new PrincipalContext(ContextType.Domain))
    
        var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
        @principal.GivenName<text> </text>@principal.Surname
    

如何提取用户的首字母(名字的首字母和姓氏的首字母)?

我用 linq 试过了:

@AccountName().ToString().Split(' ').Select(x => x[0]).ToArray()

但结果是:

System.Char[]

任何帮助将不胜感激

【问题讨论】:

那个字符数组包含名字和姓氏的第一个字母..你已经有了自己的答案 【参考方案1】:

如果您想将第一个字母输出为字符串而不是字符数组(为了使ToString 工作),请使用字符串构造函数。这已经提到here。

但是,要使其工作,您确实需要将其包装在代码块中 (@(...))。然后它会正确打印。

@(new string(@AccountName().ToString().Split(' ').Select(x => x[0]).ToArray()))

【讨论】:

我需要让这段代码在 MVC 视图上工作... 那么,为什么它不起作用? 预期类型编译错误。 如果你把它包装在一个块中 @(...)? 你说得对...谢谢!【参考方案2】:

我会使用简洁的正则表达式;

// This could be compiled and cached.
var initialsRegex = new Regex(@"(\b[a-zA-Z])[a-zA-Z]*\.* ?"); 

// This gives the initials
var initials = initialsRegex.Replace(AccountName, "$1");

这还将包括包含带有 . 首字母缩写的名称,即 John S. Doe

【讨论】:

【参考方案3】:

你也可以试试

foreach (string s in @AccountName.Split(" ".ToCharArray()))
    shortName += s.Substring(0,1).ToUpper();

【讨论】:

以上是关于在MVC辅助方法中打印每个单词的第一个字母[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java如何将每个单词的第一个字符转为大写?

C++ 每个单词的首字母必须大写

用前一个单词的字母反向替换每个单词的第一个字母

用户输入一个单词然后在java的新行上打印该单词的字母[关闭]

将每个单词的第一个字母大写而不影响连续的字母

JavaScript将字符串中的每一个单词的第一个字母变为大写其余均为小写