没有给定的参数对应于xxx的要求的形参'id'

There is no argument given that corresponds to the required formal parameter 'id' of xxx

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

class:

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)' 

我在这里尝试实例化 class(枚举是整数):

    builder.Entity<GroceryItemTag>().HasData(
        new GroceryItemTag[] {
        new GroceryItemTag(
            "Baby & Child",
            GroceryItemTagEnum.BabyAndChild,
            0xf77c
        ),
        new GroceryItemTag(
            "Baking",
            GroceryItemTagEnum.Baking,
            0xf563
        ),...

GroceryItemTagEnum:

public enum GroceryItemTagEnum
{
  BabyAndChild = 1,
  Baking,
  Bathroom,
  BeerAndWine,
  Condiments,
  Confectionary,  
  Cooking,
  Dessert,
  Drinks,
  FauxDairy,
  FauxMeat,
  FauxSeafood,
  FridgeAndDeli,
  Frozen,
  HealthFood,
  HouseHold,
  Other,
  Pantry,
  Pet,
}     

数据库上下文:

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。以前是这样的:

public class GroceryItemTag
{
    public GroceryItemTagEnum Id { get; set; }
    public int IconCodePoint {get; set;}
    public string Name { get; set; }
}

但我从那个改过来了。

悬停错误:

为什么会出现此错误?

尝试完全限定名称:

我将 GroceryItemTag 添加到 namespace Vepo.Domain。现在,当我单击转到 GroceryItemTag 上的定义时,它会将我带到 GroceryItemTag 的构造函数。并转到 GRoceryItemTag.GroceryItemTag 的定义说没有找到定义。

右键单击 new GroceryItemTag 中的 GroceryItemTag,然后 Go To Defintion 并确保 VS 已解析与您的 [=13= 匹配的正确定义].

这种类型的错误看起来像是命名空间问题,但不管怎样,您的代码对于编译器来说显然是不明确的。

同时尝试在 new 表达式中使用完全限定的类型名称,这可能有助于识别冲突。

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
        ),...

因为你说的是​​c#5,我想说它和模式匹配有关,但我无法复制。