Parameter en argument komen niet overeen

De compiler genereert de volgende fouten wanneer er geen argument is opgegeven voor een formele parameter, of het argument is niet geldig voor die parameter:

  • CS0182: Een kenmerkargument moet een constante expressie zijn, typeof expressie of expressie voor het maken van een matrix van een kenmerkparametertype
  • CS0591-: Ongeldige waarde voor argument voor kenmerk
  • CS0599: Ongeldige waarde voor het benoemde kenmerkargument 'argument'
  • CS0617-: Geen geldig benoemd attribuutargument. Benoemde attribuutargumenten moeten velden zijn die niet readonly, statisch of const zijn, of eigenschappen die openbaar, lees-schrijf en niet statisch zijn.
  • CS0633: Het argument voor het kenmerk moet een geldige id zijn
  • CS0643-: benoemd kenmerkargument dupliceren
  • CS0655-: Geen geldig benoemd kenmerkargument omdat het geen geldig kenmerkparametertype is
  • CS0839: argument ontbreekt.
  • CS1016: Benoemd attribuutargument verwacht
  • CS1739-: De beste overbelasting voor heeft geen parameter met de naam
  • CS1740: benoemd argument kan niet meerdere keren worden opgegeven
  • CS1742: Een matrixtoegang heeft mogelijk geen benoemd argumentaanduiding
  • CS1744: benoemd argument geeft een parameter op waarvoor al een positioneel argument is opgegeven
  • CS1746: De gedelegeerde heeft geen parameter met de naam 'name'
  • CS7036: Er is geen argument dat overeenkomt met de vereiste parameter
  • CS7067-: kenmerkconstructorparameter is optioneel, maar er is geen standaardparameterwaarde opgegeven.
  • CS8324: specificaties voor benoemde argumenten moeten worden weergegeven nadat alle vaste argumenten zijn opgegeven in een dynamische aanroep.
  • CS8905-: Een functiepointer kan niet worden aangeroepen met benoemde argumenten.
  • CS8943: null is geen geldige parameternaam. Als u toegang wilt krijgen tot de ontvanger van een exemplaarmethode, gebruikt u de lege tekenreeks als parameternaam.
  • CS8944: methode is geen instanciemethode, de ontvanger kan geen geïnterpoleerd stringhandler-argument zijn.
  • CS8945-: Ongeldige parameternaam.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumenten kunnen niet verwijzen naar de parameter waarop het kenmerk wordt gebruikt.
  • CS8949: De InterpolatedStringHandlerArgumentAttribute die op de parameter wordt toegepast, is ongeldig en kan niet worden geïnterpreteerd. Maak handmatig een exemplaar hiervan.
  • CS8950: Parameter is een argument voor de conversie van de geïnterpoleerde tekenreekshandler op parameter, maar het bijbehorende argument wordt opgegeven na de geïnterpoleerde tekenreeksexpressie. De volgorde van de argumenten wijzigen.
  • CS8951: parameter wordt niet expliciet opgegeven, maar wordt gebruikt als argument voor de conversie van de geïnterpoleerde tekenreekshandler op parameter.
  • CS8964-: De CallerArgumentExpressionAttribute mag alleen worden toegepast op parameters met standaardwaarden
  • CS8965-: De CallerArgumentExpressionAttribute die op de parameter wordt toegepast, heeft geen effect omdat het zelfverwijzend is.
  • CS8966: De CallerArgumentExpressionAttribute heeft geen effect omdat deze van toepassing is op een lid dat wordt gebruikt in contexten die geen optionele argumenten toestaan

Ontbrekend argument

De volgende algemene fouten worden uitgegeven wanneer de compiler geen argumenten kan koppelen aan alle lidparameters:

  • CS0839: argument ontbreekt.
  • CS7036: Er is geen argument dat overeenkomt met de vereiste parameter

Deze fouten zijn algemeen: de compiler kan de gegeven argumenten in een methode-aanroep niet afstemmen op de vereiste parameters van de methode. Controleer de volgende oorzaken:

  • Zorg ervoor dat u alle benodigde argumenten hebt opgenomen.
  • Zorg ervoor dat de argumenten de juiste volgorde hebben.
  • Zorg ervoor dat alle argumenten het juiste type zijn.
  • Zorg ervoor dat overbelastingsoplossingsregels de methode hebben gekozen die u had verwacht.

Mogelijk ziet u ook CS7036 als u overbelaste lokale functies hebt geschreven. Lokale functies kunnen niet worden overbelast. De compiler herkent alleen de eerste lokale functie met die naam. Controleer of u een andere lokale functie wilt aanroepen.

Deze fouten worden vaak weergegeven met andere diagnostische gegevens waarmee u de juiste oorzaak kunt vaststellen.

Argumenten voor kenmerken

De compiler geeft deze fouten op wanneer een argument voor een kenmerkconstructor onjuist is:

  • CS0182: Een kenmerkargument moet een constante expressie zijn, typeof expressie of expressie voor het maken van een matrix van een kenmerkparametertype
  • CS0591-: Ongeldige waarde voor argument aan kenmerk
  • CS0599: Ongeldige waarde voor het benoemde attribuutargument 'argument'
  • CS0617: Ongeldig benoemd kenmerkargument. Benoemde kenmerkargumenten moeten velden zijn die niet alleen-lezen, statisch of const zijn, of eigenschappen voor lezen/schrijven die openbaar en niet statisch zijn.
  • CS0633: Het argument voor het kenmerk moet een geldige id zijn
  • CS0643: Gedupliceerd benoemd kenmerkargument
  • CS0655-: geen geldig benoemd kenmerkargument omdat het geen geldig kenmerkparametertype is

Als u de System.AttributeUsageAttribute voor uw kenmerkdefinitie gebruikt, moet u ervoor zorgen dat de toegestane waarden elkaar niet uitsluiten. Controleer of het type en de volgorde van argumenten voor het kenmerk juist zijn. Zorg ervoor dat de tekst van stringargumenten geldig is. Voor veel kenmerken moet het argument een geldige C#-id zijn. Argumenten voor kenmerkconstructors moeten compileertijdconstanten zijn. Daarom zijn ze beperkt tot typen die letterlijke constanten ondersteunen. Bovendien zijn de volgende typen die letterlijke constanten toestaan, niet toegestaan als kenmerkparameters:

U kunt geen herhaalde benoemde argumenten opgeven met dezelfde parameternaam. U kunt alleen toegankelijke eigenschappen instellen wanneer u een kenmerk initialiseert. U kunt geen privé-eigenschappen instellen.

Benoemde en optionele parameters en argumenten

De compiler geeft de volgende fouten op voor onjuist gebruik van benoemde en optionele argumenten:

  • CS1016: Benoemd kenmerk argument verwacht
  • CS1739: De beste overbelasting voor heeft geen parameter met de naam
  • CS1740: benoemd argument kan niet meerdere keren worden opgegeven
  • CS1742: Een matrixtoegang heeft mogelijk geen benoemd argument
  • CS1744: benoemd argument geeft een parameter op waarvoor al een positioneel argument is gegeven
  • CS1746: De gemachtigde heeft geen parameter met de naam 'name'
  • CS7067-: De attribuutconstructorparameter is optioneel, maar er werd geen standaardparameterwaarde opgegeven.
  • CS8324: benoemde argumentspecificaties moeten worden weergegeven nadat alle vaste argumenten zijn opgegeven in een dynamische aanroep.
  • CS8905-: Een functie aanwijzer kan niet worden aangeroepen met benoemde argumenten.

Controleer op de volgende oorzaken van deze fouten:

  • De parameternaam van het benoemde argument is onjuist.
  • De gekozen overbelasting heeft geen parameter die overeenkomt met het benoemde argument.
  • Een parameternaam wordt herhaald op meer dan één argument.
  • Er wordt een positioneel argument (niet-benoemd) weergegeven na benoemde argumenten.
  • Benoemde argumenten zijn niet toegestaan voor matrixindexparameters.

Geïnterpoleerde tekenreekshandler

De compiler geeft de volgende fouten op wanneer u een geïnterpoleerde tekenreekshandler onjuist hebt opgegeven.

  • CS8943: null is geen geldige parameternaam. Als u toegang wilt krijgen tot de ontvanger van een exemplaarmethode, gebruikt u de lege tekenreeks als parameternaam.
  • CS8944-: Geen instantiemethode; daarom is de ontvanger geen geïnterpoleerd tekenreekshandlerargument.
  • CS8945-: Ongeldige parameternaam.
  • CS8948: InterpolatedStringHandlerArgumentAttribute argumenten kunnen niet verwijzen naar de parameter waarop het kenmerk wordt gebruikt.
  • CS8949: De op de parameter toegepaste InterpolatedStringHandlerArgumentAttribute is ongeldig en kan niet worden geïnterpreteerd. Maak handmatig een exemplaar aan.
  • CS8950: parameter is een argument voor de geïnterpoleerde tekenreekshandlerconversie op parameter, maar het bijbehorende argument wordt opgegeven na de geïnterpoleerde tekenreeksexpressie.
  • CS8951: Parameter is niet expliciet opgegeven, maar wordt gebruikt als argument voor de conversie van de geïnterpoleerde tekenreekshandler op de parameter.

Een geïnterpoleerde tekenreekshandler is een op patronen gebaseerde constructie. Het is belangrijk om het patroon correct te krijgen. Raadpleeg de sectie C#-taalspecificatie over aangepaste geïnterpoleerde handlers voor tekenreeksexpressies of volg de zelfstudie over het bouwen van een geïnterpoleerde tekenreekshandler.

Debugginginformatie voor bellers

De compiler geeft de volgende fout op bij een onjuist gebruik van de System.Runtime.CompilerServices.CallerArgumentExpressionAttribute:

  • CS8964-: De CallerArgumentExpressionAttribute mag alleen worden toegepast op parameters met standaardwaarden

Bovendien geeft de compiler de volgende waarschuwingen uit voor een onjuist gebruik van de CallerArgumentExpressionAttribute:

  • CS8965-: De CallerArgumentExpressionAttribute die op de parameter wordt toegepast, heeft geen effect omdat deze zelfreferentieel is.
  • CS8966: De CallerArgumentExpressionAttribute heeft geen effect omdat deze van toepassing is op een lid dat wordt gebruikt in contexten die geen optionele argumenten toestaan

Elke parameter die is geannoteerd met het kenmerk CallerArgumentExpression moet een standaardwaarde hebben.