Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
tipo de interfaz genérica anulable para entidades autorreferenciadas
public class MyClass : ISelfReferenceable<Guid> { public Guid Id {get;set;} public Guid? ParentId {get;set;} } public interface ISelfReferenceable<TId> { TId Id {get;set;} TId? ParentId {get;set;} }

¿Alguien puede explicarme por qué lo anterior no funciona?

Grita Error del compilador CS0738

'nombre de tipo' no implementa el miembro de interfaz 'nombre de miembro'. 'nombre de método' no puede implementar 'miembro de interfaz' porque no tiene el tipo de retorno coincidente de 'nombre de tipo'.

en MyClass.ParentId , diciendo que no implementa ISelfReferenceable.ParentId , a menos que cambie MyClass.ParentId de Guid? a Guid .

Actualmente, soluciono esto usando dos tipos genéricos, uno para Id y otro para ParentId , o simplemente hago ParentId Guid en lugar de Guid? .

¿Es este el enfoque correcto y hay una mejor manera de hacerlo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No sé si se adapta a su propósito, pero se compila con esto:

 public interface ISelfReferenceable<TId> where TId : struct { TId Id {get;set;} TId? ParentId {get;set;} }

Recuerde que Guid es un tipo de valor.

over 4 years ago · Santiago Trujillo Denunciar

0

El problema es que TId? se interpreta como un tipo de referencia anulable (de hecho, esto es más complicado y depende de la versión del idioma y de si se encuentra en un contexto anulable. Consulte también la explicación en la restricción predeterminada ) . Puede solucionarlo agregando una restricción de tipo genérico where TId : struct a la interfaz. Pero, por supuesto, esto limita los tipos aplicables a los tipos de valor. Un ID string no sería posible.

El error también desaparece si declaras

 public class MyClass : ISelfReferenceable<string> { public string Id { get; set; } public string? ParentId { get; set; } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda