Add read-only planning and repository-changing development skills so BCQuality knowledge can guide features, bug fixes, refactors, upgrades, and maintenance before the existing AL review gate runs. Track Microsoft Learn ingestion and add development and BCApps-shaped guidance evaluation fixtures. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 638b66d2-9f06-4f60-8781-808709e1485c
1.3 KiB
| bc-version | domain | keywords | technologies | countries | application-area | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
interfaces |
|
|
|
|
Guard optional interface casts with is
Description
From runtime 14.0, AL can type-test an interface or Variant with is and cast it to another interface with as. The test is non-throwing, but as raises a runtime error when the underlying codeunit does not implement the target interface. This matters when an extended capability is optional or implementations can come from other extensions.
Best Practice
Use is to establish that the value supports the target interface before using as. Cast directly only where the target implementation is an invariant guaranteed by the surrounding contract.
See sample: guard-interface-casts-with-is.good.al.
Anti Pattern
Using as unconditionally for an optional extended interface. An otherwise valid implementation of the base interface then fails at runtime merely because it does not implement the additional contract.
See sample: guard-interface-casts-with-is.bad.al.
Reference
Understand type testing and casting operators for interfaces