Der Fehler "Benutzerdefinierte Konvertierung muss in oder aus dem umschließenden Typ konvertieren" sagt genau, was es bedeutet. Wenn Sie einen Konvertierungsoperator
haben
class MyClass {
public static explicit operator xxx(string s) { // details }
public static implicit operator string(xxx x) { // details }
}
Dann muss xxx
MyClass
sein. Dies ist gemeint mit der "Konvertierung muss in oder von dem umschließenden Typ konvertiert werden". Der umschließende Typ ist hier MyClass
.
Der entsprechende Abschnitt der # spec ECMA334 C 17.9.4:
A conversion operator converts from a source type, indicated by the parameter type of the conversion operator, to a target type, indicated by the return type of the conversion operator. A class or struct is permitted to declare a conversion from a source type S to a target type T only if all of the following are true, where S0 and T0 are the types that result from removing the trailing ? modifiers, if any, from S and T:
S0 and T0 are different types.
Either S0 or T0 is the class or struct type in which the operator declaration takes place.
Neither S0 nor T0 is an interface-type.
Excluding user-defined conversions, a conversion does not exist from S to T or from T to S.
hier ist also Ihr Code:
public static explicit operator List<Model.objA>(List<Entity.objA> entities) {
List<Model.objA> objs= new List<Model.objA>();
foreach (Entity.objA entity in entities) {
objs.Add((Model.objA)entity);
}
return claims;
}
Das Problem ist, dass dies für sie als Konvertierungsoperator definiert werden muss sich in den Klassen List<Model.objA>
oder List<Entity.objA>
befinden, aber natürlich können Sie das nicht tun, da Sie keinen Zugriff darauf haben, diese Typen zu ändern.
Sie könnten Enumerable.Select
verwenden, um auf den anderen Typ zu projizieren, oder . Zum Beispiel:
public static class ListExtensions {
public static List<Model.objA> ConvertToModel(this List<Entity.objA> entities) {
return entities.ConvertAll(e => (Model.objA)e);
}
}