返回方法中的新字符串

时间:2016-03-05 15:04:43

标签: c#

我是c#的新手,所以我尝试了以下程序,这将改变字符串第一个字符的情况

public class StringBuilder
    {
        public static string ChangeFirstLetterCase(string inputdata)
        {
            if(inputdata.Length > 0)
            {
                char[] charArray = inputdata.ToCharArray();
                charArray[0] = char.IsUpper(charArray[0]) ? 
                    char.ToLower(charArray[0]) : char.ToUpper(charArray[0]);
                //return new string(charArray);
                return charArray.ToString();
            }
            return inputdata;
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            var a = StringBuilder.ChangeFirstLetterCase("vishnu");
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }

由于此方法的返回类型ChangeFirstLetterCase()是一个字符串。所以我只是按照下面的方式进行转换

`return charArray.ToString();`

因此在方法调用中它返回System.Char[]

或者我也尝试了下面的那个

`return new string(charArray);`

所以这是按预期返回值

Argument to the method - "vishnu"
Return value - "Vishnu"

所以我的问题是

  1. 由于方法的返回类型是字符串,下面的转换有什么问题?

    return charArray.ToString();

  2. 我们如何知道何时返回新字符串?。

    return new string(charArray);

  3. 请给我一些例子

3 个答案:

答案 0 :(得分:3)

如果将char数组作为String返回,它将返回对象System.Char[]的名称。这是因为char数组的ToString方法不会将数组的字符构建为可用的字符串,而只是生成一个表示对象类型的String。

但是,如果使用new String(char[]),这将读取char数组的内容,以便从char数组中的任何字符构建字符串。因此,您需要在大多数String构建中使用new String(char[]),我想不出在char数组上使用ToString()的任何实际用途。

因此,对于您的示例,您应该使用return new String(charArray);而不是return charArray.ToString();

答案 1 :(得分:1)

charArray.ToString();返回类型名称,因为它以这种方式实现,为了从字符数组中获取字符串,您将始终必须使用String类构造函数。

<{1}}的{​​{1}}方法没有以一种将字符数组作为字符串文字返回的方式实现,因此请像在第二种情况下那样使用ToString构造函数。

答案 2 :(得分:1)

你可以回复:

if(inputData[0].IsLower())
   return string.Concat(inputData[0].ToUpper(), inputData.Substring(1));  
else 
   return string.Concat(inputData[0].ToLower(), inputData.Substring(1)); 

您的值已经是一个可用的字符串,并且不需要char []。

我不确定你将字符串转换为char数组所得到的是什么。