UWP - 访问ProductListing.CurrencyCode时出现InvalidCastException

时间:2017-04-28 10:52:05

标签: c# uwp .net-core

我面临一个非常奇怪的问题。 我需要在{WSA_10_0环境中存储CurrencyCode项的ProductListing属性。

这是代码

foreach (ProductListing product in listings.ProductListings.Values)
{
    Debug.Log("CURRENCY_CODE/"+product.CurrencyCode);
}

尝试执行代码时出现以下错误

  

附加信息:无法投射类型的对象   ' Windows.ApplicationModel.Store.ProductListing'输入   ' Windows.ApplicationModel.Store.IProductListing2'

现在,这非常奇怪,因为as this documentation page states ProductListing个对象是从IProductListing2继承的。

整个例外内容在这里

System.InvalidCastException occurred
  HResult=-2147467262
  Message=Unable to cast object of type 'Windows.ApplicationModel.Store.ProductListing' to type 'Windows.ApplicationModel.Store.IProductListing2'.
  Source=mscorlib
  StackTrace:
       at System.StubHelpers.StubHelpers.GetCOMIPFromRCW_WinRT(Object objSrc, IntPtr pCPCMD, IntPtr& ppTarget)
       at Windows.ApplicationModel.Store.ProductListing.get_CurrencyCode()
       at CI.WSANative.IAPStore.WSANativeStore.<GetProductListingsAsync>d__5.MoveNext()
  InnerException: 

更新:

我已经尝试访问列表对象的CurrencyCode属性,该属性类型为ListingInformation,尽管它应该具有该属性basing on the class documentation,但它提供了类似的错误。

  

附加信息:无法投射类型的对象   &#39; Windows.ApplicationModel.Store.ListingInformation&#39;输入   &#39; Windows.ApplicationModel.Store.IListingInformation2&#39;

1 个答案:

答案 0 :(得分:2)

在Windows版本10586上引入了

CurrencyCode属性以及IListingInformation2接口。如果您针对10586或更新的SDK构建应用程序,您将能够在代码中使用它,但如果您运行应用程序在Windows版本为10240的计算机上,CLR仍会尝试通过首先在Windows运行时对象上为属性获取器所在的接口执行查询接口来调用该方法(在CurrencyCode情况下,它是IListingInformation2),但查询接口调用将失败,CLR将抛出InvalidCastException。