case_ expression_ type_ implements_ equals
Detalhes sobre o diagnóstico 'case_expression_type_implements_equals' produzido pelo analisador do Dart.
The switch case expression type '{0}' can't override the '==' operator.
Descrição
#
O analisador emite este diagnóstico quando o tipo da expressão que segue a palavra-chave case
tem uma implementação do operador == diferente da que está em Object.
Exemplo
#
O código a seguir produz este diagnóstico porque a expressão que segue a palavra-chave case
(C(0)) tem o tipo C, e a classe C sobrescreve o operador ==:
class C {
final int value;
const C(this.value);
@override
bool operator ==(Object other) {
return false;
}
}
void f(C c) {
switch (c) {
case C(0):
break;
}
}
Correções comuns
#Se não houver um motivo forte para não fazer isso, reescreva o código para usar uma estrutura if-else:
class C {
final int value;
const C(this.value);
@override
bool operator ==(Object other) {
return false;
}
}
void f(C c) {
if (c == C(0)) {
// ...
}
}
Se você não puder reescrever a instrução switch e a implementação de == não for necessária, remova-a:
class C {
final int value;
const C(this.value);
}
void f(C c) {
switch (c) {
case C(0):
break;
}
}
Se você não puder reescrever a instrução switch nem remover a definição de ==, encontre algum outro valor que possa ser usado para controlar o switch:
class C {
final int value;
const C(this.value);
@override
bool operator ==(Object other) {
return false;
}
}
void f(C c) {
switch (c.value) {
case 0:
break;
}
}
Salvo indicação em contrário, a documentação neste site reflete Dart 3.13.7. Relatar um problema.
Encontrou essa página sem tradução ou que precisa de correção? Abra uma issue e nos ajude a manter esse site em PT-BR para ajudar pessoas como você.