gpt4 book ai didi

c# - Xamarin.Android 迭代 Java.Util.HashMap

转载 作者:行者123 更新时间:2023-11-30 21:38:45 25 4
gpt4 key购买 nike

有人知道在 Xamarin.Android 中迭代 Java HashMap 的最佳方法吗?根据the docs似乎在 EntrySet 上做一个 foreach 应该返回一个 IMapEntry 的实例在每次迭代中,但是我在执行以下操作时得到了无效的强制转换:

foreach(Java.Util.IMapEntry entry in hashMap.EntrySet())

或者,如果您更愿意告诉我如何将 HashMap 转换为 .Net 字典,那也是我的最终目标。

注意:这是专门针对 Xamarin.Android 的,它似乎不像建议的副本那样直接。

最佳答案

HashMap.EntrySet() 返回一个 ICollection 以及该集合中无法转换为 IMapEntry 的项目.... ?可能,但根本问题是试图在 C# 中使用 Java 泛型,因此非泛型 EntrySet() 应该返回 HashMap.SimpleEntry(或 SimpleImmutableEntry)列表,但在 Xamarin.Android...

我通过使用 Xamarin.Android 运行时 JavaDictionary (Android.Runtime.JavaDictionary) 来解决这个问题,因为您可以“转换”一个 Hashmap 到它的泛型版本,并将其作为一个普通 C# 泛型类。

假设您正在创建或接收一个简单的 HashMap 键/值(许多 Google Android API 使用简单的 HashMap 将其 Rest API 转换为 Json,即 Google Android Drive API 使用很多 HashMap)

创建一个 Java HashMap(这是来自 POCO 或 POJO):

var map = new HashMap();
map.Put(nameof(uuid), uuid);
map.Put(nameof(name), name);
map.Put(nameof(size), size);

HashmapHandle 创建一个 JavaDictionary:

var jdictionaryFromHashMap = new Android.Runtime.JavaDictionary<string, string>(map.Handle, Android.Runtime.JniHandleOwnership.DoNotRegister);

迭代JavaDictionary:

foreach (KeyValuePair<string, string> item in jdictionaryFromHashMap)
{
Log.Debug("SO", $"{item.Key}:{item.Value}");
}

使用 Linq 创建您的 C# 字典:

var dictionary = jdictionaryFromHashMap.ToDictionary(t => t.Key, t => t.Value);

关于c# - Xamarin.Android 迭代 Java.Util.HashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com