【问题标题】:translation error in translating c# to vb .net using newton.jsoft (json.net) in visual studio 2012在 Visual Studio 2012 中使用 newton.jsoft (json.net) 将 c# 转换为 vb .net 时出现翻译错误
【发布时间】:2014-03-27 00:11:21
【问题描述】:

这段代码有什么问题: 在 Visual Studio 2012 中使用 newton.jsoft (json.net) 将 c# 转换为 vb .net 时出错: 原代码:

 public static List<TradeInfo> GetTrades(BtcePair pair)
    {
        string queryStr = string.Format("https://btc-e.com/api/2/{0}/trades", BtcePairHelper.ToString(pair));
        return JArray.Parse(WebApi.Query(queryStr)).OfType<JObject>().Select(TradeInfo.ReadFromJObject).ToList();
    }

翻译代码:

Public Shared Function GetTrades(pair As BtcePair) As List(Of TradeInfo)
    Dim queryStr As String = String.Format("https://btc-e.com/api/2/{0}/trades", _
                                                BtcePairHelper.ToString(pair))
    Return JArray.Parse(WebApi.Query(queryStr)).OfType(Of JObject)().[Select](TradeInfo.ReadFromJObject).ToList()
End Function

错误:

错误 1 ​​未为“公共共享函数 ReadFromJObject(o As Newtonsoft.Json.Linq.JObject) As TradeInfo”的参数“o”指定参数。

调用函数(vb):

Public Shared Function ReadFromJObject(o As JObject) As TradeInfo
    If o Is Nothing Then
        Return Nothing
    End If

 Return New TradeInfo() With 
  {.Amount = o.Value(Of Decimal)("amount"), _
    .Price = o.Value(Of Decimal)("price"), _
    .[Date] = UnixTime.ConvertToDateTime(o.Value(Of Long)("date")), _
    .Item = BtceCurrencyHelper.FromString(o.Value(Of String)("item")), _
    .PriceCurrency = BtceCurrencyHelper.FromString(o.Value(Of String)
    ("price_currency")), _
    .Tid = o.Value(Of Long)("tid"), _
    .Type = TradeInfoTypeHelper.FromString(o.Value(Of String)("trade_type")) _
    }
End Function

【问题讨论】:

  • IIRC,你需要AddressOf
  • 您的 C# 和 VB 版本根本不相似 - 您是通过什么方式将一个转换为另一个?
  • Slaks 是对的,它构建得很好。很快就会测试。

标签: c# json vb.net linq json.net


【解决方案1】:

我认为您只需要一个“AddressOf”,因为您实际上并没有调用“ReadFromJObject”:

Public Shared Function GetTrades(ByVal pairlist() As BtcePair, Optional ByVal limit As Integer = 150) As Dictionary(Of BtcePair, List(Of TradeInfoV3))
    Dim tradeInfoListReader As Func(Of JContainer, List(Of TradeInfoV3)) = (Function(x) x.OfType(Of JObject)().Select(AddressOf TradeInfoV3.ReadFromJObject).ToList())
    Return MakeRequest(Of List(Of TradeInfoV3))("trades", pairlist, tradeInfoListReader, New Dictionary(Of String, String)() From {{ "limit", limit.ToString() }}, True)
End Function

【讨论】:

    【解决方案2】:

    首先,C#代码返回一个Dictionary,而VB代码返回一个List。其次,这两种方法具有不同数量和类型的参数。我还没有超越。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多