Pregunta

He encontrado este pedazo de código en Koders :

private ServiceProvider SiteServiceProvider
{
    get
    {
        if (serviceProvider == null)
        {
            serviceProvider = new ServiceProvider(site as VSOLE.IServiceProvider);
            Debug.Assert(serviceProvider != null, "Unable to get ServiceProvider from site object.");
        }
        return serviceProvider;
    }
}

Me pregunto, ¿hay cualquier manera posible la Debug.Assert(serviceProvider != null podría desencadenar? Estoy bajo la impresión de que new sólo podía ser abortada por una excepción, en cuyo caso no se alcanzaría la aserción.

¿Fue útil?

Solución

Es posible que el Proveedor del Servicio anula el! = / == operador, por lo que para un no válido Estado de la comparación a NULL devuelve true.

tiene un aspecto extraño de todos modos.

Otros consejos

Yo esperaría que los ensayos para "nulo" patrón más si se trataba de un método de fábrica -. Es decir

SomeType provider = SomeFactory.CreateProvider();
if(provider == null) // damn!! no factory implementation loaded...
{ etc }

Hay otro caso, vale la pena conocer, pero que no se aplica aquí (ya que sabemos del tipo que estamos creando) ... Nullable<T>; esto es principalmente un problema con los genéricos:

static void Test<T>() where T : new()
{
    T x = new T();
    if (x == null) Console.WriteLine("wtf?");
}
static void Main()
{
    Test<int?>();
}

Esto se trata más aquí .

Estoy de acuerdo. Si se está utilizando el normal! Operador = (heredado de Object), esto no puede ocurrir nunca. Un constructor siempre devuelve una referencia de objeto y, como usted ha señalado, si ha generado una excepción en el constructor el punto de ejecución sería dejar la propiedad en su totalidad.

Me gustaría comprobar lo que este código está destinado a hacer. El constructor podría, por supuesto, haber dejado el objeto construido en un estado inconsistente, y que es presumiblemente lo que debería haber sido probados para.

Si su clase implementa ServiceProvider System.IServiceProvider, es muy posible que desee comprobar para asegurarse de que GetService () no devuelve nulo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top