【问题标题】:cannot convert from 'void' to 'System.Collections.Generic.List<string> C#无法从 'void' 转换为 'System.Collections.Generic.List<string> C#
【发布时间】:2019-04-13 18:27:49
【问题描述】:

我正在尝试将下面代码中的每个循环的新列表添加到字典中,但我目前正在努力解决以下错误:

无法从“void”转换为“System.Collections.Generic.List”

public class WeaponGen{
Dictionary<string, List<string>> weapons = new Dictionary <string, List<string>>(); 

public void WeaponGeneration(int GenerationCount)
{
    Weapon weapon = new Weapon(); //this class contains basic calculation methods
    weapons.Clear();

    for (int i = 0; i < GenerationCount; i++)
    {
        string listname = "weapon" + i;
        string id = Random.Range(1, 41).ToString();

        List<string>[] _lists = new List<string>[GenerationCount];
        _lists[i] = new List<string>();

        weapons.Add(listname, _lists[i].Add(id)); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetName(id))); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetRarity(id))); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetType(id))); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetDmg(id).ToString())); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetSpeed(id).ToString())); //this line throws an error
        weapons.Add(listname, _lists[i].Add(weapon.GetCost(id).ToString())); //this line throws an error
    }
}}

由于我在某些方面确实缺乏编码技能,因此我认为可以更好地掌握该语言的人可以帮助我。非常感谢您的每一次帮助!

【问题讨论】:

    标签: c# arrays list dictionary return


    【解决方案1】:

    欢迎来到 SO!

    List add 方法不返回任何值:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.add?view=netframework-4.7.2

    所以,如果我正确理解了您的想法,您需要用所需的值填充列表并将其本身添加到字典中,如下所示:

    for (int i = 0; i < GenerationCount; i++)
    {
        string listname = "weapon" + i;
        string id = Random.Range(1, 41).ToString();
    
        List<string>[] _lists = new List<string>[GenerationCount];
        _lists[i] = new List<string>();
    
        _lists[i].Add(id); 
        _lists[i].Add(weapon.GetName(id)); 
        _lists[i].Add(weapon.GetRarity(id)); 
        _lists[i].Add(weapon.GetType(id)); 
        _lists[i].Add(weapon.GetDmg(id).ToString());
        _lists[i].Add(weapon.GetSpeed(id).ToString()); 
        _lists[i].Add(weapon.GetCost(id).ToString());
        weapons.Add(listname, _lists[i]);
    }
    

    附: Random.Range 是什么?是某种扩展方法吗?无论如何,在如此小的间隔内基于随机值生成 id 似乎是危险的。为什么不简单使用i.ToString()

    【讨论】:

    • 谢谢,这是解决我的问题的一个非常快速和简单的方法 :) 如果可以的话,我会支持你的答案!
    • 此代码适用于我正在开发的游戏,Random.Range 继承自 UnityEngine 命名空间。我从一个 .csv 文件中获取我的值,该文件有一行 id。我使用这种方法从该列表中随机选择一个 ID(间隔基本上是该 .csv 的上限和下限)并为该 ID 生成相关的武器数据。所以这些 id 对我来说实际上就像是钥匙:D
    • 好的,这是很好的解释)
    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多