这段代码会侦听Firebase中的任何更改,并在检测到更改时触发HandleListChange():
void SetRoomListListener()
{
FirebaseDatabase.DefaultInstance
.GetReference ("Rooms")
.ValueChanged += HandleListChange;
}
我的HandleListChange()
目前看起来像这样:
void HandleListChange(object sender, ValueChangedEventArgs args)
{
if (args.DatabaseError != null) {
Debug.LogError (args.DatabaseError.Message);
return;
}
// We got the new data
foreach (DataSnapshot room in args.Snapshot.Children)
{
string roomName = room.Key;
foreach (KeyValuePair<string, Object> info in room.Value)
{
Debug.Log (info);
}
}
}
调试room.Key
为我提供了我想要的房间名称,room.Value
返回了某种字典 - &gt; Dictionary2[System.String, System.Object]
。我想使用密钥访问该词典中的值,让我们说room.Value["size"]
但是我从foreach循环foreach statement cannot operate on variables of type object because it does not contain a definition for GetEnumerator or is inaccessible
得到了这个错误。我已经尝试了很多其他方法,但无法使其发挥作用。这是我第一次使用:目录和firebase,所以我不知道最近发生了什么。适用于Unity的Firebase API非常小,互联网也没什么帮助。我想这个问题更可能发生在C#方面,而不是Unity或Firebase上。如何使用该目录中的密钥访问我的值?感谢。
答案 0 :(得分:2)
DataSnapshot.Value
object
似乎room.Value
返回var dictionary = (IDictionary<string, object>)room.Value;
var exampleValue = dictionary["size"];
,可能会封装不同的原生类型。
如果您确定select ID = case when( Row_Number() over (partition by id order by id) = 1) then id else null end
, Name = case when( row_number() over (partition by id order by id) = 1) then Name else null end
, Roles = case when (row_number() over (partition by id, roles order by id) = 1) then Roles else null end
, Groups = case when (row_number() over (partition by id, Groups order by id) = 1) then Groups else null end
, Profiles
from #yourreturnstable
包含字典,那么您应该将其转换为然后像C#中的任何字典一样访问其成员:
brew install boost