无法隐式转换类型';字符串';到';控制台应用程序1.Kategori

本文关键字:控制台 应用程序 Kategori 字符串 转换 类型 | 更新日期: 2023-09-27 18:22:15

我有一个列表,我想添加一些数据,然后在控制台上写出来,但我得到了这个错误(错误在标题中)。我知道我的课有些地方不对。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
    class Artikel
    {
        public string Artikelnummer { get; set; }
        public string Varonamn { get; set; }
        public string Beskrivning { get; set; }
        public string Bild { get; set; }
        public string Pris { get; set; }
        public Kategori kategori { get; set; }
    }
}

这是我用来创建列表的类。正如你所看到的,我有另一个名为Kategori的类,我已经创建了它的一个属性。现在我想在这个列表中使用它

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{   
    static void Main(string[] args)
    {
        List<Artikel> Minlista = new List<Artikel>();
        Minlista.Add(new Artikel { Varonamn = "Mjölk", Pris = "14.90", kategori ="", });
        Minlista.Add(new Artikel { Varonamn = "Apelsin", Pris = "7.90", kategori =  });
        Minlista.Add(new Artikel { Varonamn = "Skinka", Pris = "20", kategori = "", });
        Minlista.Add(new Artikel { Varonamn = "Räkost", Pris = "33", kategori = "", });
        Minlista.Add(new Artikel { Varonamn = "Köttfärs", Pris = "45", kategori = "", });
    }
}

}

当我尝试从列表中添加或设置值时,它运行良好,直到我尝试kategori。为什么?哦,也很抱歉,我用瑞典语写代码。希望它不会很难跟上。enter code here

无法隐式转换类型';字符串';到';控制台应用程序1.Kategori

名为kategori的属性的类型为Kategori,而不是string

 public Kategori kategori { get; set; }

因此,不能将字符串的值分配给属性kategori。您应该为kategori分配一个类型为kategori的对象。

kategori的类型更改为字符串或指定给它的值:

class Artikel
{
    // ...
    public string kategori { get; set; }
}

或分类(对于空值):

Minlista.Add(new Artikel { Varonamn = "Mjölk", Pris = "14.90", kategori = null });

或者对于"合适的对象":

Minlista.Add(new Artikel
    {
        Varonamn = "Mjölk",
        Pris = "14.90", 
        kategori = new Kategori() { KategoriID = "myID", Name = "myName" }
    });

根据注释中的请求进行更新:
要对其进行循环并获得kategori,您可以执行以下操作:

foreach (var article in Minlista)
{
    if (article.kategori != null)
        Console.WriteLine(article.kategori.Namn);
}

p.S——正如你明确提到的:我总是建议用英语写代码,即使你只是在写"一些自己的小工具"。这只是"最佳实践",应该始终使用/训练IMO.…

如果kategori是类Kategori的实例,则需要使用Kategori类的实例而不是字符串对其进行初始化。

void Main()
{
    List<Artikel> Minlista = new List<Artikel>();
    Minlista.Add(new Artikel 
                     { Varonamn = "Mjölk", Pris = "14.90", 
                       kategori = new Kategori 
                       {KategoriID = "1", Namn = "Kategori Name"} 
                      });
}

如果在这一点上,您没有kategori的值,那么您只需将其从初始化中删除(这意味着kategori字段为空)

Minlista.Add(new Artikel { Varonamn = "Mjölk", Pris = "14.90", });