C#:方法参数之--输出参数(out)
输出参数:方法声明时,使用out修饰符声明的形参,称为输出参数;
- 类似于引用参数(ref),输出参数也不创建新的存储位置(副本)
- 输出参数表示的存储位置就是实参所表示的储存位置
- 传递给输出参数的实参,在方法调用前不需要强制初始化,在方法内使用到该形参时,需要强制赋值一次。
下面展示double类型的tryParse()方法 它就是一个含有输出参数的方法
Console.WriteLine("请输入:");
var inputStr = Console.ReadLine();
double targetValue;
var parser_result = double.TryParse(inputStr,out targetValue);
if (parser_result)
{
Console.WriteLine(targetValue);
}
else
{
Console.WriteLine("转换失败--{0}",targetValue);
}
自己定义一个类似TryParse()的方法
定义ParseToDouble(object inputStr, out double parseResult)方法
static bool ParseToDouble(object inputStr, out double parseResult)
{
parseResult = 0;
try
{
parseResult = Convert.ToDouble(inputStr);
return true;
}
catch
{
return false;
}
}
在Main方法中调用该方法
var inputStr = Console.ReadLine();
double targetValue;
Console.WriteLine("请再次输入:");
inputStr = Console.ReadLine();
var parseResult = ParseToDouble(inputStr, out targetValue);
if (parseResult)
{
Console.WriteLine(targetValue);
}
else
{
Console.WriteLine("转换失败--{0}",targetValue);
}
以上展示了输出参数为值类型时,方法是如何定义以及如何调用的
输出参数为引用类型时的示例
class Student
{
public int Age { get; set; }
public string StuName { get; set; }
static bool CanCreateStudent(int age, string name, out Student stu)
{
stu = null;
if (age < 7 || age > 80)
{
return false;
}
if (string.IsNullOrWhiteSpace(name))
{
return false;
}
stu = new Student() { Age = age, StuName = name };
return true;
}
}
在Mian方法中调用
//待创建的stu对象
Student student;
var can_create = Student.CanCreateStudent(1,"",out student);
if (can_create)
{
Console.WriteLine(student.Age+"--"+student.StuName);
}
else
{
Console.WriteLine("不满足创建Student对象的条件");//输出:不满足创建Student对象的条件
}
Student student1;
var can_create_1 = Student.CanCreateStudent(12, "bigboss", out student1);
if (can_create_1)
{
Console.WriteLine(student1.Age + "--" + student1.StuName);//输出:12--bigboss
}
else
{
Console.WriteLine("不满足创建Student对象的条件");
}
以上便是对 out参数的总结,相较ref参数而言,out参数使用场景更多。它给予我们的方法"拥有多个返回值的能力";记录下来out参数的知识点,以便以后查阅
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异