当前位置: 首页 > 知识库问答 >
问题:

从List到字典的转换,Foreach语句的问题

蔚和安
2023-03-14

我开始尝试将列表结构转换为字典,但遇到了一些麻烦。我正在修改我的前述语句<代码>

我现在用字典卡在这一行:moveMsg=p.connectionId。ToString() '%' p.playerPosition. x.() '%' p.player位置。ToString() '|';

我得到的错误是:Assets/Scripts/Server。cs(118,18):错误CS1061:键入系统。收藏。通用的键值对

如何进行修改?

声明字典:公共字典

词典

// Ask player for their position

if (Time.time - lastMovementUpdate > movementUpdateRate)
{
    lastMovementUpdate = Time.time;
    string moveMsg = "ASKPOSITION|";
    foreach (KeyValuePair <int, Player> p in players)
        moveMsg += p.connectionId.ToString() + '%' + p.playerPosition.x.ToString() + '%' + p.playerPosition.y.ToString() + '|';
    moveMsg = moveMsg.Trim('|');
    Send(moveMsg, unreliableChannel, players);
}

球员级别

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player
{
    public string PlayerName;
    public GameObject Avatar;
    public int ConnectionId;
    public byte[] Tex;          // data coming from CanvasController
    public string Type;         // data coming from CanvasController
    public string Id;           // data coming from GameManager
    public int Strength;        // data coming from PlayerController
    public int Hitpoints;       // data coming from PlayerController
    public bool IsAlive;        // data coming from PlayerController

    // Initial method takes base arguments for testing
    public Player(string playerName, GameObject avatar, int connectionID)
    {
        PlayerName = playerName;
        Avatar = avatar;
        ConnectionId = connectionID;
    }
    // Overload method takes all animal arguments
    public Player(string playerName, GameObject avatar, int connectionID, byte[] tex, string type, string id, int strength, int hitpoints, bool isAlive)
    {
        PlayerName = playerName;
        Avatar = avatar;
        ConnectionId = connectionID;

        Tex = tex;
        Type = type;
        Id = id;
        Strength = strength;
        Hitpoints = hitpoints;
        IsAlive = isAlive;

        Debug.Log(id + " : " + type + " created with strength " + strength + ", hit points " + hitpoints + ", and a texture the size of " + tex.Length);
    }
}

共有3个答案

尤夕
2023-03-14

KeyPairValue只包含两个属性Key和Value

https://msdn.microsoft.com/en-us/library/5tbh8a42(v=vs.110)

你试过:p.Key而不是p.ConnectionIdp.Value而不是p.PlayerPosition

编辑:我使用聚合fct编写了一个小lambda来简化代码。我传递默认值,然后对于dict中的每个项目,它将包含另一个字符串。我还使用字符串插值来避免字符串连接($“{variable}”)。

    class Player
    {
        public Point Position { get; set; }
    }

    public void Test()
    {
        var players = new Dictionary<int, Player>();
        var msg = players.Aggregate(
              string.Empty, 
             (current, p) => current + 
                       $"{p.Key}%{p.Value.Position.X}%{p.Value.Position.Y}|");
    }
左凯定
2023-03-14

你在你的玩家类中有一个连接ID,但是可以访问连接ID。PS.奇怪的是,为什么它会被编译。顺便说一句,你可以使用播放器。Join-a linq扩展

丌官向荣
2023-03-14

因为您的变量p是一个KeyValuePair

 类似资料:
  • foreach 循环语句是 Java 1.5 的新特征之一,在遍历数组、集合方面,foreach 为开发者提供了极大的方便。 foreach 循环语句是 for 语句的特殊简化版本,主要用于执行遍历功能的循环。 foreach 循环语句的语法格式如下: 其中, “类型”为集合元素的类型,“变量名”表示集合中的每一个元素,“集合”是被遍历的集合对象或数组。每执行一次循环语句,循环变量就读取集合中的一

  • 本文向大家介绍Java8中forEach语句循环一个List和Map,包括了Java8中forEach语句循环一个List和Map的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我将向您展示如何用新的Java 8 forEach语句循环一个List和Map。 1、forEach 和 Map 1.1、常规循环Map常用的方法。 1.2 、在Java 8中, 你可以用forEach + lam

  • 我有一个方法createCompliance响应(),它返回BOLConplationObject对象,在此之前,我将其更改为BOLConplationMono,因为我必须在其中调用另一个反应性服务。但是在这样做之后,我调用该服务的当前服务在第6行和第7行出现错误。 我为其更改了退货类型的另一项服务是

  • 我有这样一种方法,将结果强制转换到(列表),但我的eclipse仍然在抱怨!类型安全:未选中从列表到列表的强制转换

  • 本文向大家介绍字典到Python中的元组转换列表,包括了字典到Python中的元组转换列表的使用技巧和注意事项,需要的朋友参考一下 将集合类型从一种类型转换为另一种类型是python中非常常见的需求。在本文中,我们将看到如何根据字典中存在的键值对创建元组。每个键值对都成为一个元组。因此,最终列表是一个元素为元组的列表。 用 我们起诉字典的items方法,该方法使我们可以遍历每个键值对。然后,我们使