2017-01-28 2 views
0

Борясь с этим кодом, очень новой для C# и я попытался несколько ответов на StackOverflow, прежде чем писать этот вопрос, поэтому, пожалуйста, выслушайте меня ...Выход внутренний словарь KeyValuePair утешать

var onlinePlayers = new Dictionary<int, Dictionary<string,string>>(); 
var count = 0; 
foreach (BasePlayer player in BasePlayer.activePlayerList) 
{ 
    onlinePlayers.Add(
     count, 
     new Dictionary<string, string> { 
      { "SteamID", player.userID.ToString() }, 
      { "PlayerName", player.displayName.ToString() }, 
      { "IPAddress", Regex.Replace(player.net.connection.ipaddress, @":{1}[0-9]{1}\d*", "").ToString } 
     } 
    ); 

    count += 1; 
} 

foreach (var k in onlinePlayers.Keys) 
{ 
    foreach (KeyValuePair<string, string> pair in onlinePlayers[k]) 
    { 
     Console.WriteLine("{0}: {1}", pair.Key, pair.Value); 
    } 
} 

Я ожидаю

SteamID: 1231231221321 
PlayerName: HelloWorld 
IPAddress: 127.0.0.1 

для каждого элемента в коллекции.

Compiler ошибка:

Error while compiling StatLogger.cs(38,111): error CS1503: Argument #2 cannot convert method group expression to type string

+0

Попробуйте 'foreahc (var k in onlonePlayers.Keys) Consoe.WriteLine (" {0}: {1} ", k, onlineplayers [k]);' –

+0

Это дает: Ошибка при компиляции StatLogger.cs (38,111) : ошибка CS1503: аргумент '# 2' не может преобразовать выражение' method group' в тип 'string' – zanderwar

+0

Моя ошибка, это словарь ... должен быть вложенными циклами - первым, чтобы получить внутренний словарь, а второй - получить значения для него. Не на компьютере прямо сейчас, слишком сложно написать это на моем мобильном телефоне .... –

ответ

1

Вы упускаете круглые скобки () в конце вашего .ToString().

{ "IPAddress", Regex.Replace(player.net.connection.ipaddress, @":{1}[0-9]{1}\d*", "").ToString }

Update:

Также player.net.connection.ipaddress.ToString()

выше превратит IP в строку, и это должно предотвратить ошибку.

+0

Вы были правы, это' player.net.connection.ipaddress' вызывает эту ошибку – zanderwar

+0

См. обновление @Zanderwar –

+0

Спасибо! За работой – zanderwar

0

Вы пытаетесь перечислить ключ Dictionary, а не Dictionary.

Попробуйте это:

foreach (player in onlinePlayers) { 
    foreach (playerInfo in player.Value) { 
    Console.WriteLine("{0}: {1}", playerInfo.Key, playerInfo.Value); 
    } 
} 

Смотрите, если это помогает.

Смежные вопросы