决定是否将参数传递给 using 语句中的方法

Deciding whether or not to pass an argument to a method in a using statement

我使用 Neo4J .NET 驱动程序从 Neo4J 数据库中获取一些数据。我需要在 using 块中创建一个会话,但是,如果我正在处理特定版本的数据库,我还需要将一个参数传递给 using 块中的方法。这是没有参数的代码:

using (var conn = GraphDatabase.Driver(connectionString, AuthTokens.Basic(user, pass)).Session())
{
    // ...some logic...
}

并带有参数:

using (var conn = GraphDatabase.Driver(connectionString, AuthTokens.Basic(user, pass)).Session(SessionConfigBuilder.ForDatabase(db)))
{
    // ...some logic...
}

我需要根据作为参数传递的版本调用方法中提到的 using 块之一。我想知道如何解决这个问题?创建一个 returns 会话的自定义对象,将逻辑放在私有方法中,并创建两个 ifs,每个 ifs 中的任何一个 using?

无需创建两个 using 块。根据 the source,不接受任何参数的 .Session() 重载仅调用传递给它的 null 的另一个重载。你可以简单地做同样的事情。

创建一个Action<SessionConfigBuilder>类型的对象,其值由版本决定,然后将其传递给.Session()方法。它应该类似于以下内容:

var action = specificVersion ? SessionConfigBuilder.ForDatabase(db) : null;

using (var conn = GraphDatabase.Driver(connectionString, AuthTokens.Basic(user, pass))
                               .Session(action))
{

}