我是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"
所以我的问题是
由于方法的返回类型是字符串,下面的转换有什么问题?
return charArray.ToString();
我们如何知道何时返回新字符串?。
return new string(charArray);
请给我一些例子
答案 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
类构造函数。
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数组所得到的是什么。