【问题标题】:Deciding whether or not to pass an argument to a method in a using statement在 using 语句中决定是否将参数传递给方法
【发布时间】:2021-06-24 14:06:35
【问题描述】:

我使用 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 块之一。我想知道如何解决这个问题?创建一个返回会话的自定义对象,将逻辑放在私有方法中并创建两个 ifs,其中每个 using 中的一个?

【问题讨论】:

  • 我并没有真正使用neo4j,但是基于the source,你可以只做var action = specificVersion ? SessionConfigBuilder.ForDatabase(db) : null;,然后你可以将action传递给.Session()
  • 不管怎样,我在您的代码中没有看到任何 构造函数

标签: c# .net neo4j


【解决方案1】:

无需创建两个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))
{

}

【讨论】:

    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2018-10-04
    • 2020-10-08
    相关资源
    最近更新 更多