C# 没有给出与所需形式参数';id';xxx的

C# 没有给出与所需形式参数';id';xxx的,c#,.net-5,C#,.net 5,我正在尝试实例化这个类: 班级: using System.Text.Json.Serialization; public class GroceryItemTag { [JsonConstructor] public GroceryItemTag(string name, GroceryItemTagEnum id, int iconCodePoint) { Id = id; IconCodePoint = iconCodePoint;

我正在尝试实例化这个类:

班级:

using System.Text.Json.Serialization;

public class GroceryItemTag
{
    [JsonConstructor]
    public GroceryItemTag(string name, GroceryItemTagEnum id, int iconCodePoint)
    {
        Id = id;
        IconCodePoint = iconCodePoint;
        Name = name;
    }

    public GroceryItemTagEnum Id { get; set; }
    public int IconCodePoint { get; set; }
    public string Name { get; set; }
}
我得到了这个错误:

There is no argument given that corresponds to the required formal parameter 'id' of 'GroceryItemTag.GroceryItemTag(GroceryItemTagEnum, int, string)' 
这里我尝试实例化该类(枚举是int):

数据库上下文:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;

namespace Vepo.Domain
{
    public class VepoContext : DbContext
    {
        public VepoContext(DbContextOptions<VepoContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<GroceryItemGroceryStore>().HasKey(table => new
            {
                table.GroceryItemId,
                table.GroceryStoreId
            });

            builder.Entity<MenuItemRestaurant>().HasKey(table => new
            {
                table.MenuItemId,
                table.RestaurantId
            });

            builder.Entity<GroceryItemTag>()
            .Property(tag => tag.Id)
            .ValueGeneratedNever();

            builder.Entity<MenuItemTag>()
            .Property(tag => tag.Id)
            .ValueGeneratedNever();

            builder.Entity<GroceryItemTag>().HasData(
                new GroceryItemTag[] {
                new GroceryItemTag(
                    "Baby & Child",
                    GroceryItemTagEnum.BabyAndChild,
                    0xf77c
                ),
                new GroceryItemTag(
                    "Baking",
                    GroceryItemTagEnum.Baking,
                    0xf563
                ),
                new GroceryItemTag (
                    "Beer & Wine",
                    GroceryItemTagEnum.BeerAndWine,
                    0xf4e3
                ),
                new GroceryItemTag (
                    "Condiments",
                    GroceryItemTagEnum.Condiments,
                    0xf72f
                ),
                new GroceryItemTag (
                    "Confectionary",
                    GroceryItemTagEnum.Confectionary,
                    0xf819
                ),
                new GroceryItemTag (
                    "Cooking",
                    GroceryItemTagEnum.Cooking,
                    0xe01d
                ),
                new GroceryItemTag (
                    "Dessert",
                    GroceryItemTagEnum.Dessert,
                    0xf810
                ),
                new GroceryItemTag (
                    "Drinks",
                    GroceryItemTagEnum.Drinks,
                    0xf804
                ),
                new GroceryItemTag (
                    "Faux Meat",
                    GroceryItemTagEnum.FauxMeat,
                    0xf814
                ),
                new GroceryItemTag (
                    "Faux Dairy",
                    GroceryItemTagEnum.FauxDairy,
                    0xf7f0
                ),
                new GroceryItemTag (
                    "Faux Seafood",
                    GroceryItemTagEnum.FauxSeafood,
                    0xf7fe
                ),
                new GroceryItemTag (
                    "Fridge & Deli",
                    GroceryItemTagEnum.FridgeAndDeli,
                    0xe026
                ),
                new GroceryItemTag (
                    "Frozen",
                    GroceryItemTagEnum.Frozen,
                    0xf7ad
                ),
                new GroceryItemTag (
                    "Bathroom",
                    GroceryItemTagEnum.Bathroom,
                    0xe06b
                ),
                new GroceryItemTag (
                    "Health Food",
                    GroceryItemTagEnum.HealthFood,
                    0xf787
                ),
                new GroceryItemTag (
                    "Household",
                    GroceryItemTagEnum.HouseHold,
                    0xf898
                ),
                new GroceryItemTag (
                    "Pantry",
                    GroceryItemTagEnum.Pantry,
                    0xf7eb
                ),
                new GroceryItemTag (
                    "Pet",
                    GroceryItemTagEnum.Pet,
                    0xf6d3
                ),
                new GroceryItemTag (
                    "Other",
                    GroceryItemTagEnum.Other,
                    0xf39b
                }});

            builder.Entity<MenuItemTag>().HasData(
                new MenuItemTag[] {
                new MenuItemTag {
                    Name = "American",
                    Id = MenuItemTagEnum.American,
                    IconCodePoint = 0xf803
                },
                new MenuItemTag {
                    Name = "Asian",
                    Id = MenuItemTagEnum.Asian,
                    IconCodePoint = 0xf823
                },
                new MenuItemTag {
                    Name = "Bakery",
                    Id = MenuItemTagEnum.Bakery,
                    IconCodePoint = 0xf705
                },
                new MenuItemTag {
                    Name = "Barbecue",
                    Id = MenuItemTagEnum.Barbecue,
                    IconCodePoint = 0xf80f
                },
                new MenuItemTag {
                    Name = "Breakfast",
                    Id = MenuItemTagEnum.Breakfast,
                    IconCodePoint = 0xe002
                },
                new MenuItemTag {
                    Name = "Cafe",
                    Id = MenuItemTagEnum.Cafe,
                    IconCodePoint = 0xf6c5
                },
                new MenuItemTag {
                    Name = "Chinese",
                    Id = MenuItemTagEnum.Chinese,
                    IconCodePoint = 0xf823
                },
                new MenuItemTag {
                    Name = "Deli",
                    Id = MenuItemTagEnum.Deli,
                    IconCodePoint = 0xf81f
                },
                new MenuItemTag {
                    Name = "Desserts",
                    Id = MenuItemTagEnum.Desserts,
                    IconCodePoint = 0xf551
                },
                new MenuItemTag {
                    Name = "European",
                    Id = MenuItemTagEnum.European,
                    IconCodePoint = 0xf7a2
                },
                new MenuItemTag {
                    Name = "Fish & Chips",
                    Id = MenuItemTagEnum.FishAndChips,
                    IconCodePoint = 0xf7fe
                },
                new MenuItemTag {
                    Name = "Indian",
                    Id = MenuItemTagEnum.Indian,
                    IconCodePoint = 0xf156
                },
                new MenuItemTag {
                    Name = "French",
                    Id = MenuItemTagEnum.Fench,
                    IconCodePoint = 0xf7f6
                },
                new MenuItemTag {
                    Name = "German",
                    Id = MenuItemTagEnum.German,
                    IconCodePoint = 0xf820
                },
                new MenuItemTag {
                    Name = "Greek",
                    Id = MenuItemTagEnum.Greek,
                    IconCodePoint = 0xf68b
                },
                new MenuItemTag {
                    Name = "Health Food",
                    Id = MenuItemTagEnum.HealthFood,
                    IconCodePoint = 0xf81e
                },
                new MenuItemTag {
                    Name = "Italian",
                    Id = MenuItemTagEnum.Italian,
                    IconCodePoint = 0xf817
                },
                new MenuItemTag {
                    Name = "Japanese",
                    Id = MenuItemTagEnum.Japanese,
                    IconCodePoint = 0xf56a
                },
                new MenuItemTag {
                    Name = "Kebab",
                    Id = MenuItemTagEnum.Kebab,
                    IconCodePoint = 0xf821
                },
                new MenuItemTag {
                    Name = "Kiwi",
                    Id = MenuItemTagEnum.Kiwi,
                    IconCodePoint = 0xf535
                },
                new MenuItemTag {
                    Name = "Korean",
                    Id = MenuItemTagEnum.Korean,
                    IconCodePoint = 0xf159
                }});


            builder.Entity<GroceryItem>()
            .Property(e => e.Tags)
            .HasConversion(
                v => JsonSerializer.Serialize(v, null),
                v => JsonSerializer.Deserialize<List<GroceryItemTag>>(v, null),
                new ValueComparer<IList<GroceryItemTag>>(
                    (c1, c2) => c1.SequenceEqual(c2),
                    c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
                    c => (IList<GroceryItemTag>)c.ToList()));

        }

        public DbSet<GroceryItem> GroceryItems { get; set; }
        public DbSet<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
        public DbSet<MenuItemRestaurant> MenuItemRestaurants { get; set; }
        public DbSet<MenuItem> MenuItems { get; set; }
        public DbSet<GroceryStore> GroceryStores { get; set; }
        public DbSet<GroceryItemTag> GroceryItemTags { get; set; }
        public DbSet<MenuItemTag> MenuItemTags { get; set; }
        public DbSet<Restaurant> Restaurants { get; set; }
    }
}
但我改变了

悬停错误:

为什么我会犯这个错误

请尝试完全限定名称:


我将GroceryItemTag添加到
名称空间Vepo.Domain
。现在,当我单击
GroceryItemTag
上的go to definition(转到定义)时,它会将我带到GroceryItemTag的构造函数。然后转到GRoceryItemTag的定义。GRoceryItemTag表示未找到定义。

右键单击
new GRoceryItemTag
中的
GRoceryItemTag
,然后转到定义,确保VS已解析与您的
JsonConstructor
匹配的正确定义

这种类型的错误看起来像是名称空间问题,但编译器显然不清楚代码的方式

还可以尝试在
新表达式中使用完全限定的类型名,这可能有助于识别冲突

builder.Entity<GroceryItemTag>().HasData(
        new Vepo.Domain.GroceryItemTag[] {
        new Vepo.Domain.GroceryItemTag(
            "Baby & Child",
            GroceryItemTagEnum.BabyAndChild,
            0xf77c
        ),
        new Vepo.Domain.GroceryItemTag(
            "Baking",
            GroceryItemTagEnum.Baking,
            0xf563
        ),...
builder.Entity().HasData(
新的Vepo.Domain.GroceryItemTag[]{
新建Vepo.Domain.GroceryItemTag(
“婴儿与儿童”,
食品杂货店婴儿食品店,
0xf77c
),
新建Vepo.Domain.GroceryItemTag(
“烘焙”,
食品杂货店,
0xf563
),...


因为你说的是c#5,我想说它与模式匹配有关,但我不能复制它。

Huh。错误中的方法签名与构造函数签名不同。这很奇怪。有没有扩展方法可以从枚举转换为Int?你应该包括GroceryAgen的部分或全部定义嗯,但是检查名称空间,在C#5中,它可能试图进行模式匹配,因为另一个错误导致DLL无法首先编译。请查看关于发布代码的指导…特别是问题中缺少您可能想要阅读的JSON…以及与JSON相关的代码…post中显示的代码编译得非常好…一个d运行(假设基本
public enum GroceryItemTagEnum{Baking,BabyAndChild};
并忽略未知
builder
part)谢谢@AlexeiLevenkov,但这里没有json…@JohnG这只是意味着其他地方有一个相互竞争的定义,或者一个类似的命名类型。无论哪种方式,只有OP可以在前面的所有代码中找到这一点。当我右键单击“转到定义”时,它会转到正确的定义,但当我尝试使用完全限定名时,它不存在,请参阅关于这个问题的全部细节,请参见我问题的新底部。因此它实际上应该是
new Vepo.Domain.GroceryItemTag(…
您使用的新语法现在无效。(尽管没有点;)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;

namespace Vepo.Domain
{
    public class VepoContext : DbContext
    {
        public VepoContext(DbContextOptions<VepoContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<GroceryItemGroceryStore>().HasKey(table => new
            {
                table.GroceryItemId,
                table.GroceryStoreId
            });

            builder.Entity<MenuItemRestaurant>().HasKey(table => new
            {
                table.MenuItemId,
                table.RestaurantId
            });

            builder.Entity<GroceryItemTag>()
            .Property(tag => tag.Id)
            .ValueGeneratedNever();

            builder.Entity<MenuItemTag>()
            .Property(tag => tag.Id)
            .ValueGeneratedNever();

            builder.Entity<GroceryItemTag>().HasData(
                new GroceryItemTag[] {
                new GroceryItemTag(
                    "Baby & Child",
                    GroceryItemTagEnum.BabyAndChild,
                    0xf77c
                ),
                new GroceryItemTag(
                    "Baking",
                    GroceryItemTagEnum.Baking,
                    0xf563
                ),
                new GroceryItemTag (
                    "Beer & Wine",
                    GroceryItemTagEnum.BeerAndWine,
                    0xf4e3
                ),
                new GroceryItemTag (
                    "Condiments",
                    GroceryItemTagEnum.Condiments,
                    0xf72f
                ),
                new GroceryItemTag (
                    "Confectionary",
                    GroceryItemTagEnum.Confectionary,
                    0xf819
                ),
                new GroceryItemTag (
                    "Cooking",
                    GroceryItemTagEnum.Cooking,
                    0xe01d
                ),
                new GroceryItemTag (
                    "Dessert",
                    GroceryItemTagEnum.Dessert,
                    0xf810
                ),
                new GroceryItemTag (
                    "Drinks",
                    GroceryItemTagEnum.Drinks,
                    0xf804
                ),
                new GroceryItemTag (
                    "Faux Meat",
                    GroceryItemTagEnum.FauxMeat,
                    0xf814
                ),
                new GroceryItemTag (
                    "Faux Dairy",
                    GroceryItemTagEnum.FauxDairy,
                    0xf7f0
                ),
                new GroceryItemTag (
                    "Faux Seafood",
                    GroceryItemTagEnum.FauxSeafood,
                    0xf7fe
                ),
                new GroceryItemTag (
                    "Fridge & Deli",
                    GroceryItemTagEnum.FridgeAndDeli,
                    0xe026
                ),
                new GroceryItemTag (
                    "Frozen",
                    GroceryItemTagEnum.Frozen,
                    0xf7ad
                ),
                new GroceryItemTag (
                    "Bathroom",
                    GroceryItemTagEnum.Bathroom,
                    0xe06b
                ),
                new GroceryItemTag (
                    "Health Food",
                    GroceryItemTagEnum.HealthFood,
                    0xf787
                ),
                new GroceryItemTag (
                    "Household",
                    GroceryItemTagEnum.HouseHold,
                    0xf898
                ),
                new GroceryItemTag (
                    "Pantry",
                    GroceryItemTagEnum.Pantry,
                    0xf7eb
                ),
                new GroceryItemTag (
                    "Pet",
                    GroceryItemTagEnum.Pet,
                    0xf6d3
                ),
                new GroceryItemTag (
                    "Other",
                    GroceryItemTagEnum.Other,
                    0xf39b
                }});

            builder.Entity<MenuItemTag>().HasData(
                new MenuItemTag[] {
                new MenuItemTag {
                    Name = "American",
                    Id = MenuItemTagEnum.American,
                    IconCodePoint = 0xf803
                },
                new MenuItemTag {
                    Name = "Asian",
                    Id = MenuItemTagEnum.Asian,
                    IconCodePoint = 0xf823
                },
                new MenuItemTag {
                    Name = "Bakery",
                    Id = MenuItemTagEnum.Bakery,
                    IconCodePoint = 0xf705
                },
                new MenuItemTag {
                    Name = "Barbecue",
                    Id = MenuItemTagEnum.Barbecue,
                    IconCodePoint = 0xf80f
                },
                new MenuItemTag {
                    Name = "Breakfast",
                    Id = MenuItemTagEnum.Breakfast,
                    IconCodePoint = 0xe002
                },
                new MenuItemTag {
                    Name = "Cafe",
                    Id = MenuItemTagEnum.Cafe,
                    IconCodePoint = 0xf6c5
                },
                new MenuItemTag {
                    Name = "Chinese",
                    Id = MenuItemTagEnum.Chinese,
                    IconCodePoint = 0xf823
                },
                new MenuItemTag {
                    Name = "Deli",
                    Id = MenuItemTagEnum.Deli,
                    IconCodePoint = 0xf81f
                },
                new MenuItemTag {
                    Name = "Desserts",
                    Id = MenuItemTagEnum.Desserts,
                    IconCodePoint = 0xf551
                },
                new MenuItemTag {
                    Name = "European",
                    Id = MenuItemTagEnum.European,
                    IconCodePoint = 0xf7a2
                },
                new MenuItemTag {
                    Name = "Fish & Chips",
                    Id = MenuItemTagEnum.FishAndChips,
                    IconCodePoint = 0xf7fe
                },
                new MenuItemTag {
                    Name = "Indian",
                    Id = MenuItemTagEnum.Indian,
                    IconCodePoint = 0xf156
                },
                new MenuItemTag {
                    Name = "French",
                    Id = MenuItemTagEnum.Fench,
                    IconCodePoint = 0xf7f6
                },
                new MenuItemTag {
                    Name = "German",
                    Id = MenuItemTagEnum.German,
                    IconCodePoint = 0xf820
                },
                new MenuItemTag {
                    Name = "Greek",
                    Id = MenuItemTagEnum.Greek,
                    IconCodePoint = 0xf68b
                },
                new MenuItemTag {
                    Name = "Health Food",
                    Id = MenuItemTagEnum.HealthFood,
                    IconCodePoint = 0xf81e
                },
                new MenuItemTag {
                    Name = "Italian",
                    Id = MenuItemTagEnum.Italian,
                    IconCodePoint = 0xf817
                },
                new MenuItemTag {
                    Name = "Japanese",
                    Id = MenuItemTagEnum.Japanese,
                    IconCodePoint = 0xf56a
                },
                new MenuItemTag {
                    Name = "Kebab",
                    Id = MenuItemTagEnum.Kebab,
                    IconCodePoint = 0xf821
                },
                new MenuItemTag {
                    Name = "Kiwi",
                    Id = MenuItemTagEnum.Kiwi,
                    IconCodePoint = 0xf535
                },
                new MenuItemTag {
                    Name = "Korean",
                    Id = MenuItemTagEnum.Korean,
                    IconCodePoint = 0xf159
                }});


            builder.Entity<GroceryItem>()
            .Property(e => e.Tags)
            .HasConversion(
                v => JsonSerializer.Serialize(v, null),
                v => JsonSerializer.Deserialize<List<GroceryItemTag>>(v, null),
                new ValueComparer<IList<GroceryItemTag>>(
                    (c1, c2) => c1.SequenceEqual(c2),
                    c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())),
                    c => (IList<GroceryItemTag>)c.ToList()));

        }

        public DbSet<GroceryItem> GroceryItems { get; set; }
        public DbSet<GroceryItemGroceryStore> GroceryItemGroceryStores { get; set; }
        public DbSet<MenuItemRestaurant> MenuItemRestaurants { get; set; }
        public DbSet<MenuItem> MenuItems { get; set; }
        public DbSet<GroceryStore> GroceryStores { get; set; }
        public DbSet<GroceryItemTag> GroceryItemTags { get; set; }
        public DbSet<MenuItemTag> MenuItemTags { get; set; }
        public DbSet<Restaurant> Restaurants { get; set; }
    }
}
public class GroceryItemTag
{
    public GroceryItemTagEnum Id { get; set; }
    public int IconCodePoint {get; set;}
    public string Name { get; set; }
}
builder.Entity<GroceryItemTag>().HasData(
        new Vepo.Domain.GroceryItemTag[] {
        new Vepo.Domain.GroceryItemTag(
            "Baby & Child",
            GroceryItemTagEnum.BabyAndChild,
            0xf77c
        ),
        new Vepo.Domain.GroceryItemTag(
            "Baking",
            GroceryItemTagEnum.Baking,
            0xf563
        ),...