significa restriccion que new modificador inherited generic constraint c# exception new-operator

restriccion - que significa new en c#



Comprobando la inicialización de C#new() para null? (3)

Es posible que ServiceProvider anule el operador! = /==, por lo que para un estado no válido la comparación con null devuelve verdadero.

Se ve extraño de todos modos.

Encontré este fragmento 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 alguna forma posible de que se Debug.Assert(serviceProvider != null ? Tengo la impresión de que el new solo podría ser anulado por una excepción, en cuyo caso nunca se alcanzaría la afirmación.


Estoy de acuerdo. Si se usa el operador! = Normal (heredado de Object), esto nunca puede suceder. Un constructor siempre devuelve una referencia de objeto y, como ha señalado, si se arrojó una excepción en el constructor, el punto de ejecución dejaría la propiedad por completo.

Verificaría lo que este código pretende hacer. El constructor podría, por supuesto, haber dejado el objeto construido en un estado inconsistente, y eso es probablemente lo que debería haber sido probado.

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


Esperaría más que el patrón "test for null" si fuera un método de fábrica, es decir,

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

Hay otro caso que vale la pena conocer, pero que no se aplica aquí (ya que sabemos el 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 está cubierto más aquí .