Pular para o conteúdo principal

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 ==:

dart
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:

dart
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:

dart
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:

dart
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;
  }
}

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ê.