Keine Boxen-oder type-parameter-Konvertierung für generische Typ-parameter

Habe ich folgende helper-Methode:

public static T CreateRequest<T>()
    where T : Request, new()
{
    T request = new T();
    //...
    //Assign default values, etc.
    //...
    return request;
}

Ich diese Methode verwenden möchten, die im inneren eine andere Methode in einem anderen Helfer:

public T Map<F, T>(F value, T toValue)
    where T : new()
    where F : new()
{
    if (typeof(T).BaseType.FullName == "MyNamespace.Request")
    {
        toValue = MyExtensions.CreateRequest<T>();
    }
    else
    {
        toValue = new T();
    }
}

Aber dann bekomme ich die Fehlermeldung:

Den Typ 'T' kann nicht verwendet werden, die als Typ-parameter 'T' im generischen Typ oder Methode " MyExtensions.CreateRequest()'. Es gibt keine boxing-Konvertierung oder type-parameter Konvertierung von 'T' zu 'MyNamespace.Anfrage'.

Gibt es eine Möglichkeit, wandeln Sie den Typ "T", so dass CreateRequest würde es verwenden ohne Probleme?

EDIT:

Ich weiß, ich kann zwei Dinge tun:

  • lösen Sie Einschränkungen auf CreateRequest oder
  • anziehen Constraints in der Karte.

Aber ich kann nicht den ersten, weil in CreateRequest ich die Benutzer Eigenschaften des Request-Klasse, und ich kann jetzt nicht die zweite, weil ich die anderen Arten (die nicht Erben aus Anfrage) mit Map-Funktion.

es bedeutet: "entweder die oder keine"

InformationsquelleAutor Lukasz Lysik | 2012-08-06

Schreibe einen Kommentar