2016-11-24 7 views
0

Ich versuche, meine graphQL-Mutation generisch zu machen. Aber zur Laufzeit bekomme ich einen Fehler.
Der Fehler lautet: Objektverweis nicht auf eine Instanz eines Objekts festgelegt.NULL-Referenz bei der Verwendung von GetElementType() erhalten

public class ApplicationMutation<T> : ObjectGraphType where T: BaseModel 
{ 
    public ApplicationMutation() 
    { 
     this.Name = "RootMutation"; 

     var nameofT = typeof(T).GetElementType().Name; 

     this.Field<AddPayloadType<T>>(
      "add" + nameofT, 
      arguments: new InputQueryArguments<AddInputType<T>>(), 
      resolve: context => 
      { 
       var input = context.GetArgument<AddInput<T>>("input"); 

       var result = Activator.CreateInstance<T>(); 
       { 
        Name = "1337 p40c355I73m"; 
       }; 

       return new AddPayload<T>(input, result); 
      }); 

     this.Field<UpdatePayloadType<T>>(
      "update" + nameofT, 
      arguments: new InputQueryArguments<UpdateInputType<T>>(), 
      resolve: context => 
      { 
       var input = context.GetArgument<UpdateInput<T>>("input"); 

       var result = Activator.CreateInstance<T>(); 
       { 
        Name = "rul0r item"; 
       }; 

       return new UpdatePayload<T>(input, result); 
      }); 

     this.Field<DeletePayloadType<T>>(
      "delete" + nameofT, 
      arguments: new InputQueryArguments<DeleteInputType<T>>(), 
      resolve: context => 
      { 
       var input = context.GetArgument<DeleteInput<T>>("input"); 

       var result = true; 

       return new DeletePayload<T>(input, result); 
      }); 
    } 
} 

Die Ausnahme wird von der folgenden Zeile geworfen: var nameofT = typeof(T).GetElementType().Name;

Wenn mehr Informationen benötigt werden, nur danach fragen.

+1

Werfen Sie einen Blick auf diese qu estion: http://stackoverflow.com/q/7072088/1514875 - Es scheint, dass Sie nur 'GetElementType()' für Arrays verwenden sollten. – TryingToImprove

+1

Verwenden Sie GetGenericArguments() anstelle von GetElementType(). – MMK

Antwort

1

Sie können nur die GetElementType() für Arrays, Zeiger und Referenzen Typen verwenden ..

null, wenn der aktuelle Type nicht ein Array oder ein Zeiger ist oder nicht als Referenz übergeben oder für einen generischen Typ oder ein Typparameter bei der Definition eines generischen Typs oder generische Methode https://msdn.microsoft.com/en-us/library/system.type.getelementtype.aspx

Es wird null Rückkehr für Generika des

+0

Haben Sie Vorschläge, was ich stattdessen verwenden könnte? – venter

+1

@MMK schlägt 'GetGenericArguments()' vor, aber ich bin nicht sicher, ob das funktioniert .. :) – TryingToImprove

Verwandte Themen