2015-08-20 1 views
-4
public void saveSettings() 
    { 
     refreshSettings(); 
     userSettings.sword = swordEquiped; 
     userSettings.staff = staffEquiped; 
     userSettings.bow = bowEquiped; 
     userSettings.overalldamage = overallDamage; 
     userSettings.silver = silver; 
     userSettings.gold = gold; 
     userSettings.exp = exp; 
     userSettings.level = level; 
     userSettings.physical = physicalDamage; 
     userSettings.magic = magicDamage; 
     userSettings.ranged = rangedDamage; 
     userSettings.inventory = string.Join(", ", itemsBought.ToArray()); 
     userSettings.Save(); 
    } 
    public void loadSettings() 
    { 
     exp = userSettings.exp; 
     level = userSettings.level; 
     swordEquiped = userSettings.sword; 
     staffEquiped = userSettings.staff; 
     bowEquiped = userSettings.bow; 
     overallDamage = userSettings.overalldamage; 
     silver = userSettings.silver; 
     gold = userSettings.gold; 
     physicalDamage = userSettings.physical; 
     magicDamage = userSettings.magic; 
     rangedDamage = userSettings.ranged; 
     nameChosen = userSettings.username; 
     itemsBought = userSettings.inventory; 
    } 

У меня есть List<string> имени itemsBought и имеет 3 значения, которые являются только имена элементов "Short Sword", "Shortbow", "Staff of Energy". Я задаюсь вопросом, как я могу получить список в строку, потому что это работает:Невозможно преобразовать строку в список ошибок

userSettings.inventory = string.Join(", ", itemsBought.ToArray()); 

, но когда я пытаюсь загрузить его с:

itemsBought = userSettings.inventory; 

Он не может преобразовать его, давая мне ошибка Cannot implicitly convert type 'string' to 'System.Collections.Generic.List<string>'.

+1

«но когда я пытаюсь загрузить его: itemsBought = userSettings.inventory; Он не может преобразовать его »означает что? – pm100

+0

Параметры загрузки Настройки userSettings = new Settings(); – Versified

+0

Я могу сохранить его как userSettings.inventory = string.Join (", ", itemsBought.ToArray()), но когда я пытаюсь чтобы загрузить его, он выдает ошибку – Versified

ответ

3

Во-первых, изменить присоединиться строку "," (без пробела), то попробуйте следующее:

itemsBought = userSettings.inventory.Split(',').ToList(); 

или, возможно, это (возможно, у вас есть неявное преобразование из некоторого InventoryItem класса к типу string поэтому необходимо повторно создать):

itemsBought = userSettings.inventory 
    .Split(',') 
    .Select(s => new InventoryItem(s)) 
    .ToList(); 
+0

ahh, спасибо. Это сработало. однако он появляется как «System.Collections.Generic.List'1 [System.String], Short Sword», который, я хочу сохранить «Short Sword», но как мне избавиться от остальных? – Versified

+0

Запустите программу в режиме отладки и выполните код. Убедитесь, что значение 'userSettings.inventory' - это строка со значением« Short Sword, Shortbow, Staff of Energy ». Похоже, что один из ваших элементов, с которыми вы соединяетесь, не является строковым типом, а «списком» строк. Вам, возможно, нужно прокручивать их, и делать правильные вещи с каждым элементом (преобразование списков в собственные строки и использование строк напрямую). – ErikE

+0

userSettings.inventory - это список. userSettings.inventory.Split ('') ToList(). – Versified

0

Вам нужно преобразовать его обратно в массив с помощью String.split()

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

using System; 

public class SplitTest { 
    public static void Main() { 

     string words = "This is a list of words, with: a bit of punctuation" + 
         "\tand a tab character."; 

     string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' }); 

     foreach (string s in split) { 

      if (s.Trim() != "") 
       Console.WriteLine(s); 
     } 
    } 
} 
// The example displays the following output to the console: 
//  This 
//  is 
//  a 
//  list 
//  of 
//  words 
//  with 
//  a 
//  bit 
//  of 
//  punctuation 
//  and 
//  a 
//  tab 
//  character 
Смежные вопросы