c# - C# 条件使用和默认参数
问题描述
假设,我们有一个基于某个文件、连接或其他资源的操作。
我们需要一个方法,它可以使用提供的资源运行,或者 - 如果没有提供 - 创建自己的:
string Foo(Resource parameter = null)
{
if (parameter == null)
{
using (var res = new Resource)
{
res.Something();
/*......*/
/*......*/
/*......*/
return /*..........*/
}
}
else
{
parameter.Something();
/*......*/
/*......*/
/*......*/
return /*..........*/
}
}
}
它有效,但这对我来说真的很难看。这是一种以更紧凑和“好”的方式编写它的方法吗?
我不能使用:
string Foo(Resource parameter = null)
{
using (var res = parameter ?? new Resource())
{
res.Something();
/*......*/
/*......*/
/*......*/
return /*..........*/
}
}
因为如果作为参数传递,它会处理我的原始资源。
PS。这个问题的正确标签是什么?#coding-style 被标记为“不使用”。
解决方案
一种简单的方法是仅递归 ifparameter
为 null:
string Foo(Resource parameter = null)
{
if (parameter == null)
{
using (var res = new Resource())
{
return Foo(res);
}
}
else
{
parameter.Something();
...
return ...;
}
}
你只会递归一次,所以你不需要担心无界堆栈等。
推荐阅读
- typescript - 什么| (管道)表示 TypeScript 中类型的开头
- c# - 在项目整体 C#、ASP.net mvc 中使用逗号作为小数分隔符
- node.js - 使用功能 Dialogflow 的 Foreach 建议
- html - Bootstrap 3 输入下拉菜单
- javascript - 默认“需要输入/请填写此字段”消息在输入字段内使用图标后不显示
- android - 在 android 中实现 seekbar 的最低 android 版本要求是什么?
- c# - 等待多个独立任务的最佳方法/实践是什么?
- java - TomEE Embedded 作为 systemctl 服务停止
- r - 加载的数据在服务器功能中不可用
- c# - 字典中不存在给定的键。mysql数据库c#中的错误