No hay una conversión de referencia implícita del "tipo de derivado" al "tipo base" en genéricos -- # campo con generics camp Relacionados El problema

There is no implicit reference conversion from “Derive Type” to “Base type” in Generics


0
vote

problema

Español

Aquí está el código

   public interface IEntity<T>      {        T Id { get; set; }    }   public abstract class Entity<T> : IEntity<T>            {         public T Id { get; set; }     }   public class Country : Entity<int>     { ...     }   public interface IRepository<T> where T : Entity<Type>     {     }   public abstract class Repository<T> : IRepository<T>        where T : Entity<Type>     {     }   public class CountryRepository : Repository<Country> { }   

Estoy recibiendo un error siguiente:

El tipo 'model.country' no se puede usar como parámetro de tipo 't' en el tipo genérico o método 'repositorio'. No hay una conversión de referencia implícita de 'país' a 'entidad & lt; system.type & gt;'.

¿Cómo puedo asignar el tipo derivado de tipo a tipo de base como parámetro genérico?

Editar:

Obtuve mi solución aquí creando una barba más y úsela.

http://msdn.microsoft.com/en-us/library/ AA479858.ASPX

El moderador puede eliminar esta pregunta

Original en ingles

Here is the code

 public interface IEntity<T>      {        T Id { get; set; }    }   public abstract class Entity<T> : IEntity<T>            {         public T Id { get; set; }     }   public class Country : Entity<int>     { ...     }   public interface IRepository<T> where T : Entity<Type>     {     }   public abstract class Repository<T> : IRepository<T>        where T : Entity<Type>     {     }   public class CountryRepository : Repository<Country> { } 

I am getting following error:

The type 'Model.Country' cannot be used as type parameter 'T' in the generic type or method 'Repository'. There is no implicit reference conversion from 'Country' to 'Entity<System.Type>'.

How can I map derived type to base type as generic parameter?

Edit:

I got my solution here by creating one more baseclass and use it.

http://msdn.microsoft.com/en-us/library/aa479858.aspx

Moderator can delete this question

     
       
       

Lista de respuestas

4
 
vote

Está violando su restricción genérica:

  fun <T> LiveData<T>.observeOnce(observer: Observer<T>) {          observeForever(object : Observer<T> {             override fun onChanged(t: T?) {                 observer.onChanged(t)                 removeObserver(this)             }         })      } 4  

y

  fun <T> LiveData<T>.observeOnce(observer: Observer<T>) {          observeForever(object : Observer<T> {             override fun onChanged(t: T?) {                 observer.onChanged(t)                 removeObserver(this)             }         })      } 5  

fun <T> LiveData<T>.observeOnce(observer: Observer<T>) { observeForever(object : Observer<T> { override fun onChanged(t: T?) { observer.onChanged(t) removeObserver(this) } }) } 6 NO ES fun <T> LiveData<T>.observeOnce(observer: Observer<T>) { observeForever(object : Observer<T> { override fun onChanged(t: T?) { observer.onChanged(t) removeObserver(this) } }) } 7 .

Si desea permitir "cualquier tipo" puede hacer esto a través de una clase base común:

  fun <T> LiveData<T>.observeOnce(observer: Observer<T>) {          observeForever(object : Observer<T> {             override fun onChanged(t: T?) {                 observer.onChanged(t)                 removeObserver(this)             }         })      } 8  
 

You are violating your generic constraint:

public abstract class Repository<T> : IRepository<T>    where T : Entity<Type> // <= here 

and

public class Country : Entity<int> 

Entity<int> is not Entity<Type>.

If you want to allow "any type" you can do this via a common base class:

public abstract class Entity { } public abstract class Entity<T> : Entity, IEntity<T>        {     public T Id { get; set; } } public abstract class Repository<T> : IRepository<T>    where T : Entity { } 
 
 
   
   

Relacionados problema

12  ¿Redundancia en C #?  ( Redundancy in c ) 
TOMAR EL SIGUIENTE SNIPPET: List<int> distances = new List<int>(); ¿La redundancia pretendía los diseñadores de idiomas? Si es así, ¿por qué? ...

1  Cómo escribir un freeall genérico para TLIST <T>  ( How to write a generic freeall for tlistt ) 
¿Cuál es la mejor manera de escribir una función FreeAll que tomará un TList<T> genérico y liberar cada uno de los elementos de la lista? Tiene sentido que...

13  Vista parcial genérica: ¿Cómo establecer una clase genérica como modelo?  ( Generic partial view how to set a generic class as model ) 
Estoy tratando de construir una vista genérica de cuadrícula en una aplicación ASP.NET MVC. Déjame explicar con algún código: public interface ITrustGrid...

76  ¿Cuál es el significado de la advertencia de seguridad de tipo en ciertos moldes genéricos de Java?  ( What is the meaning of the type safety warning in certain java generics casts ) 
¿Cuál es el significado de la advertencia ? Tipo de seguridad: el lanzamiento del objeto a LISTE & LT; INTEGER & GT; en realidad está revisando la lista de...

10  ¿Cómo se implementa la función genérica en Java?  ( How is generic function implemented in java ) 
Según mi entendimiento de la siguiente función genérica en Java: public static <T> T f(T x) { Integer[] arr = new Integer[4]; T ret = (T) arr[2]; ...

4  ¿Tipo genérico args que especifican la clase de extensión?  ( Generic type args which specificy the extending class ) 
Quiero tener una clase que implementa una interfaz, que especifica la subclase específica como un parámetro. public abstract Task implements TaskStatus<Tas...

1  Obtener el constructor de un tipo de interfaz a través de la reflexión, ¿hay un mejor enfoque que el bucle a través de los tipos?  ( Getting the constructor of an interface type through reflection is there a bett ) 
He escrito un tipo genérico: IDirectorySource<T> where T : IDirectoryEntry , que estoy usando para administrar las entradas de Active Directory a través de M...

2  ¿Cómo lanzar a CRTP en Java?  ( How to cast to crtp in java ) 
Tengo un caso bastante simple donde hago alguna asignación genérica básica: final Detail detail = field.getAnnotation(Detail.class); final String example =...

2  TypeScript: Tipo '{}' no se le asigna a escribir 'Pick <T, K>', ¿cómo puedo escribir correctamente JavaScript `Pick`?  ( Typescript type is not assignable to type pickt k how do i type java ) 
Quiero escribir una función llamada pick , Sé que TypeScript ha incorporado Pick<T, K> , ahora quiero implementar la parte real del uso del código fuente, p...

21  Obtener tipo de clase derivado del método estático de una base  ( Get derived class type from a bases class static method ) 
Me gustaría obtener el tipo de clase derivada de un método estático de su clase base. ¿Cómo se puede lograr esto? ¡Gracias! class BaseClass { static ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos