Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
CA1417: Niet gebruiken
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1417 |
| Titel | Niet gebruiken OutAttribute voor tekenreeksparameters voor P/Invokes |
| Categorie | Interoperabiliteit |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Als waarschuwing |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Een tekenreeksparameter P/Invoke wordt doorgegeven door de waarde en gemarkeerd met OutAttribute.
Beschrijving van regel
De .NET-runtime voert automatisch tekenreeks-interning uit. Als een geïnterneerde tekenreeks die gemarkeerd is met
Hoe schendingen op te lossen
Als het noodzakelijk is om gewijzigde tekenreeksgegevens naar de aanroeper terug te marshallen, geeft u de tekenreeks in plaats daarvan door via een referentie. Anders kan de OutAttribute zonder andere wijzigingen worden verwijderd.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Wanneer waarschuwingen onderdrukken
Het is niet veilig om een waarschuwing van deze regel te onderdrukken.