我想说我正在通过简单的编码来学习语言。
如果我创建一个对象ResourceTemplate
为
public class ResourceTemplate
{
public string Name;
public int Value;
}
然后做了
List<ResourceTemplate> resource = new List<ResourceTemplate>();
该资源将是一个包含ResourceTemplate
结构的列表。
如果是这样,为什么我无法使用 resource.Add("product", 500);?
编译器说:
它无法使用.Add()函数重载
答案 0 :(得分:5)
您应该创建一个新的instance类:
resource.Add(new ResourceTemplate {Name = "product", Value = 500});
或者像这样:
ResourceTemplate resourceTemplate = new ResourceTemplate
{
Name = "product",
Value = 500
};
resource.Add(resourceTemplate);
但是,通过向您的班级添加constructor,就像这样:
public class ResourceTemplate
{
public ResourceTemplate(string name, int value)
{
Name = name;
Value = value;
}
public string Name;
public int Value;
}
然后你可以:
resource.Add(new ResourceTemplate("product", 500 ));
此外,我建议您使用properties代替公共字段:
public string Name { get; set; }
public int Value { get; set; }
答案 1 :(得分:3)
List<T>.Add
需要指定类型的实例,而不是创建这种类型的参数列表。
例如(使用对象初始化程序语法):
resource.Add(new ResourceTemplate {Name = "product", Value = 500});
您还可以使用集合初始化程序语法:
var resource = new List<ResourceTemplate>() {{Name = "product", Value = 500}};
答案 2 :(得分:1)
默认情况下:resource.Add
只能接受ResourceTemplate
作为参数。
正确的语法必须是:
var resourceTemplate = new ResourceTemplate
{
Name = "product",
Price = 500,
};
resource.Add(resourceTemplate);
您不能这样做,因为没有Add
的版本可以接受字符串和整数并转换为未知的ResourceTemplate
结构。
为了添加Add
的重载,您可以创建一个扩展方法:
public static class ListExtensions
{
public static void Add(this List<ResourceTemplate> list, string name, string price)
{
var resourceTemplate = new ResourceTemplate
{
Name = name,
Price = price,
};
list.Add(resourceTemplate);
}
}
答案 3 :(得分:1)
您可以使用集合基础结构。
public class ResourceTemplate
{
public string Name;
public int Value;
}
public class ResourceTemplateList : System.Collections.CollectionBase
{
public void Add(string name, int value)
{
this.List.Add(new ResourceTemplate { Name = name, Value = value });
}
}
然后,您可以将类成员添加到列表中。
ResourceTemplateList r_templates = new ResourceTemplateList();
r_templates.Add("product", 500);
答案 4 :(得分:0)
到目前为止,这些是我在这个问题中解决的主要概念(和解决方案):
//Declarations of Lists
public List<ResourceTemplate> stockpile = new List<ResourceTemplate>();
//We pass to the obj a name and creates the obj with the name and a
stockpile
public NationBuilder(string name)
{
this.Name = name;
stockpile = new List<ResourceTemplate>();}
//We can add resources into the stockpile with LINQ
public void AddResource(string itemName, int quantity, float value)//Adds
Resources to the stockpile
{
stockpile.Add(new ResourceTemplate {Name = itemName, Quantity =
quantity, Value = value });
}
此解决方案的输出是此数据结构:
- nation
- Name
- Stockpile
-[0] <-Here
- Name "resourceName"
- Quantity "quantity"
- Value "value"
这里:我想通过名称来索引而不是索引。 而不是
[0] -> [Coal]
- Quantity
- Value
否则管理库存的处理程序需要事先知道每个资源的位置。