Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ和lambdas将字符串放入适当的大小写中_C#_Linq_Lambda - Fatal编程技术网

C# 使用LINQ和lambdas将字符串放入适当的大小写中

C# 使用LINQ和lambdas将字符串放入适当的大小写中,c#,linq,lambda,C#,Linq,Lambda,我有一个名为ProperCase的函数,它接受一个字符串,然后将每个单词的第一个字母转换为大写。所以ProperCase(“john smith”)将返回“john smith”。代码如下: public string ProperCase(string input) { var retVal = string.Empty; var words = input.Split(' '); foreach (var word in wo

我有一个名为ProperCase的函数,它接受一个字符串,然后将每个单词的第一个字母转换为大写。所以ProperCase(“john smith”)将返回“john smith”。代码如下:

    public string ProperCase(string input)
    {
        var retVal = string.Empty;
        var words = input.Split(' ');

        foreach (var word in words)
        {
            if (word.Length == 1)
            {
                retVal += word.ToUpper();
            }
            else if (word.Length > 1)
            {
                retVal += word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
            }

            retVal += ' ';
        }

        if (retVal.Length > 0)
        {
            retVal = retVal.Substring(0, retVal.Length - 1);
        }

        return retVal;
    }

这段代码工作得很好,但我很确定我可以用LINQ和lambdas更优雅地完成它。能告诉我怎么做吗?

将输入字符串拆分为单词,将每个单词转换为标题大小写,然后将转换后的单词重新连接在一起:

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

string result = string.Join(" ", input.Split(' ')
                                      .Select(word => textInfo.ToTitleCase(word))
                                      .ToArray());

另一个解决办法是

Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper());

根据dtb的回答。如果您在cshtml页面中处理c#razor,并且需要一行程序:

@(string.Join(" ", input.ToLower().Split(' ').Select(word => word.Substring(0,1).ToUpper() + word.Substring(1, word.Length - 1)).ToArray() ))
或者Javascript(可以使用正则表达式,但这很有趣):


谢谢,做得很好!我在lambda:word=>textInfo.ToTitleCase(word.ToLower())中添加了一个ToLower,在这里不需要使用Linq。无论字数多少,ToTitleCase(输入)都会执行相同的操作。
var text = input.toLowerCase().split(' ').map(function(word){ return word.substring(0, 1).toUpperCase() + word.substring(1, word.length); }).join(" ");