"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Puede C# implementar la inferencia de tipo genérico parcial y, de ser así, cómo?

¿Puede C# implementar la inferencia de tipo genérico parcial y, de ser así, cómo?

Publicado el 2025-03-22
Navegar:578

Can C# Implement Partial Generic Type Inference, and If So, How?

¿Se puede implementar la inferencia de tipo genérico parcial en c#?

general

este artículo explora los desafíos de implementación de la infferencia de tipo en c#, enfocándose en las limitaciones y las soluciones potenciales para la infreza de tipo genérico parcial

el problema [&]

El caso descrito es donde debe estar disponible un método de extensión para una clase base específica, con parámetros genéricos relacionados con un argumento del método. Sin embargo, el método de extensión también debe devolver un tipo específico relacionado con el descendiente particular en el que se invoca.

la solución

Como resulta, la inferencia de tipo genérico parcial no es compatible directamente en C#. However, there are strategies that can achieve a similar result.

Solutions for Partial Generic Type Inference

Method 1: Using Type Constraints

A syntax similar to the desired code can be achieved using type constraints:

public static TReg Parameter(this Treg P, nombre de cadena, valor t) donde treg: parameterizedRregistrationBase

public static TReg Parameter(this TReg p, string name, T value)
    where TReg : ParameterizedRegistrationBase

Método 2: Uso de dos funciones con WRAPPER

este enfoque implica dividir la operación en dos financiaciones: ThatareWrapper que (esta fuente ) { devolver nuevo thatareWrapper (fuente); } Clase pública thatareWrapper { // ... Implementación }

y:

public static ThatAreWrapper That(this IEnumerable source)
{
    return new ThatAreWrapper(source);
}

public class ThatAreWrapper
{
    // ... Implementation
}

este trabajo requiere pasos adicionales, pero permite más flexibilidad en especificar el tipo de resultados. Class

listOfFruits.That().Are().Where(banana => banana.Peel != Color.Black)
introduciendo los métodos de extensión directamente en la clase base, se puede evitar el problema. Sin embargo, este enfoque elimina la capacidad de usar los métodos de extensión en otras clases en el futuro.

conclusión

La inferencia de tipo genérico parcial no es compatible directamente en C#, pero hay soluciones que pueden proporcionar una funcionalidad similar. El enfoque específico de uso depende de los requisitos y compensaciones específicos involucrados.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3