首页 > 解决方案 > 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 被标记为“不使用”。

标签: c#

解决方案


一种简单的方法是仅递归 ifparameter为 null:

string Foo(Resource parameter = null)
{
    if (parameter == null)
    {
        using (var res = new Resource())
        {
            return Foo(res);   
        }
    }
    else 
    {
        parameter.Something();
        ...
        return ...;
    }
}

你只会递归一次,所以你不需要担心无界堆栈等。


推荐阅读