在C#中如何拼接string与int变量并作为返回值输出?
C# 多类型返回方案及原代码报错原因
原代码运行失败原因
你的示例代码声明了返回值类型为int,但实际返回的是字符串和整数拼接后得到的string类型,C#是强类型语言,编译时会校验返回值和声明类型的匹配度,二者不匹配因此无法运行。
如果你的需求就是返回拼接后的带ID的文字,直接修改返回类型为string即可正常运行,示例代码:
public string Test(int id1) { return "Your ID is " + id1; }
多返回类型的实现方案
如果确实需要同一个方法支持返回不同类型的变量,常用方案如下:
- 返回
object类型
所有C#类型都继承自object,因此可以将返回值声明为object来承接任意类型的返回结果,拿到返回值后需要手动做类型转换。
示例:
缺点是存在拆箱性能损耗,且没有编译时类型安全校验。public object Test(int id1) { // 可按需返回int、string等任意类型的结果 if (id1 > 0) return id1; return "Invalid ID"; } - 返回元组(C# 7.0及以上版本支持)
如果你需要同时返回多个不同类型的结果,优先用值元组,调用时可以直接获取对应类型的字段,无需转换。
示例:public (int Id, string Prompt) Test(int id1) { return (id1, $"Your ID is {id1}"); } // 调用示例 var result = Test(1001); int id = result.Id; string prompt = result.Prompt; - 泛型方法
如果调用时可以明确需要返回的类型,可以用泛型实现强类型的多返回适配:public T Test<T>(int id1) { if (typeof(T) == typeof(int)) return (T)(object)id1; if (typeof(T) == typeof(string)) return (T)(object)$"Your ID is {id1}"; return default; } // 调用示例 int intResult = Test<int>(1001); string strResult = Test<string>(1001); - 返回
dynamic类型(不推荐)
可以声明返回类型为dynamic,编译时会跳过类型检查,类型校验逻辑延迟到运行时执行,容易引发运行时异常,非必要不建议使用。
内容的提问来源于stack exchange,提问作者Qiyuan Liu
相关产品推荐
相关产品推荐

