【问题标题】:"ref" vs "out" keyword errors using the sql-net and C# Sqlite combination for windows phone 7.1使用 Windows Phone 7.1 的 sql-net 和 C# Sqlite 组合的“ref”与“out”关键字错误
【发布时间】:2012-11-26 10:13:02
【问题描述】:

我在使用 windows phone 7.1 的 sql-net 和 C# Sqlite 组合时遇到了一些“ref”与“out”关键字错误。这是因为我使用的库组合错误吗?

应用类型:Windows Phone 7.1

使用:

  1. sql-net 版本 1.0.5,通过 Visual Studio 源 Nuget
  2. 适用于 WP7 的 C# Sqlite (wp7sqlite) (Community.CSharpSqlite.WP7) 版本 0.1.1,通过 Visual Studio 提供 Nuget 源代码。

我收到的确切错误如下

错误 5 Community.CsharpSqlite.Sqlite3.sqlite3_open(string, ref Community.CsharpSqlite.Sqlite3.sqlite3)' 的最佳重载方法匹配有一些无效参数 C:\Dev\Learning\SQLite.cs 行:2492 列:29

然后下一个错误提示它与作为“out”类型而不是“ref”类型传递的参数有关。

错误 6 参数 2 必须使用“ref”关键字传递 C:\Dev\Learning\SQLite.cs 行:2492 列:64

我可以通过将“out”关键字替换为“ref”关键字来消除编译错误,但这可能会导致其他问题。鉴于我没有看到太多关于这个问题的抱怨 - 我可能做错了什么但无法轻易检测到。

【问题讨论】:

    标签: c# linq sqlite windows-phone-7


    【解决方案1】:

    该参数在 csharp-sqlite(sqlite-net 使用的可选(?))中在 3.7.6.3 和 3.7.7.1 之间从 ref 更改为 out,参见 this commit(查找第 2692 行)。

    如果您不想更新代码,则需要使用较新版本的 csharp-sqlite。您可能没有看到很多关于此的问题,因为您是少数出于某种原因使用旧版本的人之一。

    【讨论】:

    • 谢谢。这解释了我面临的问题的核心。通过 NuGet 发布的 sql-net 版本尚未更新以匹配通过 NuGet 发布的 C# Sqlite。鉴于使用率很高,我没想到会这样。检查 sql-net 的最新源代码:它仍未针对 CSharp-Sqlite 的这些更改进行更新。我会跟进sql-net的开发者。
    • @param 啊,哎呀,看起来wp7sqlite.codeplex.com 是基于旧版本的code.google.com/p/csharp-sqlite,并且 sqlite-net 使用后者。令人误解的是,wp7sqlite.codeplex.com 代码是 NuGet 上作为 csharpsqlite 提供的代码。
    【解决方案2】:

    以下方法签名

    Community.CsharpSqlite.Sqlite3.sqlite3_open(string, ref Community.CsharpSqlite.Sqlite3.sqlite3)
    

    明确指出第二个参数是通过引用传递的 (ref)

    所以,当调用这个方法时使用ref keyword instead of out.

    您还可以在这里找到很多信息:

    Difference between ref and out parameters in .NET

    【讨论】:

    • 它可能还值得补充一点,如果使用out 而不是ref 调用它真的很重要,那么您可以创建某种具有相同签名的包装函数,除了out ...我不确定我能看到这可能会导致什么问题,但我不会认为这是必要的...
    • @Azodious 感谢您的快速回复。正如你所建议的和我所说的,我可以通过用 ref 关键字替换 out 来消除这些错误。 但是该代码来自开源 (sql-net) 并且已经使用了一段时间没有用户报告此问题
    • 如果之前编译过,这意味着ref没有被out替换。你需要分析更多。
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多