C#字符串大小写转换时char.IsUpper的out参数兼容性报错求解
报错核心原因
out关键字本身和char类型不存在兼容问题,你之前用int类型搭配out能正常运行,本质是当时调用的方法(比如int.TryParse)本身就定义了带out int参数的重载。这次报错是因为char.IsUpper()根本没有(string, out char)的方法签名,编译器找不到匹配的重载自然抛出错误。
原代码的其他问题
除了out参数用法错误之外,你的代码还有三处会导致功能不符合预期的问题:
char.IsUpper的合法用法只有两种:要么传入单个char类型参数判断该字符是否为大写,要么传入string类型+int类型的索引参数,判断字符串指定位置的字符是否为大写,该方法本身不会返回字符类型的结果,不需要加out参数。string.ToUpper()和string.ToLower()不会修改原始字符串,执行后会返回转换完成的新字符串,你不接收返回值直接调用的话,这两行代码不会产生任何实际效果。- 原逻辑无法实现大小写互换:你原来的判断逻辑是想判断整个字符串是否为大写再统一转换,和“大小写互换(大写转小写、小写转大写)”的需求逻辑不匹配。
大小写互换的正确实现
如果要实现输入字符串每个字母的大小写互换,非字母字符保持不变,可以直接用字符数组遍历处理,代码如下:
// 读取输入文本,Text本身就是string类型,不需要多余ToString() string input = TxbG.Text; SwapCase(input); void SwapCase(string input) { char[] strChars = input.ToCharArray(); for (int i = 0; i < strChars.Length; i++) { if (char.IsUpper(strChars[i])) { strChars[i] = char.ToLower(strChars[i]); } else if (char.IsLower(strChars[i])) { strChars[i] = char.ToUpper(strChars[i]); } } // 把转换后的字符数组转成字符串赋值给输出框 TxbV.Text = new string(strChars); }
如果你确实需要使用带
out char参数的方法,只要调用的方法本身定义了对应参数即可正常传参,不存在char和out不兼容的问题,比如bool char.TryParse(string s, out char res)这类系统定义的带out参数的方法,都可以正常使用。
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

