2012-04-09 19 views
1

Ich habe folgenden Operator in meiner Sicht WebPart die Code-Behind-Datei:Fehler In Bezug auf User Defined Conversion

public static implicit operator TemplateControl 
(ScholarChip.PaymentProcessor.PaymentProcessor.PaymentProcessor target) 
    { 
     return ((target == null) ? null : target.TemplateControl); 
    } 

Ich erhalte die Fehlermeldung:

User-defined conversion must convert to or from the enclosing type 

Ich bin nicht mit dem oben genannten Fehler. Kann jemand vorschlagen, wie ich es korrigieren könnte? Der Code wird in einem Sharepoint 2010 Visual WebPart verwendet. viel

Thanks :)

Antwort

2

Das Problem ist, dass Sie eine Konvertierung zwischen PaymentProcessor und TemplateControl sind definiert, aber du bist nicht, dass die Umwandlung in entweder der PaymentProcessor Klasse oder der TemplateControl Klasse definieren. TemplateClass scheint Teil eines Frameworks zu sein. Daher bezweifle ich, dass Sie die Konvertierung in dieser Klasse definieren können.

Eine benutzerdefinierte Konvertierung muss ein Mitglied eines der beiden Typen sein, die konvertiert werden (was nur eine andere Art zu sagen ist, was die Fehlermeldung sagt). Mit anderen Worten, wenn Sie die PaymentProcessor-Klasse steuern, verschieben Sie die Konvertierung in diese Klasse. Wenn Sie keine Klasse kontrollieren, haben Sie kein Glück und müssen die Konvertierung in einer normalen Methode durchführen.

Als Beispiel wird dies den gleichen Compiler-Fehler geben Sie sah:

class A {} 
class B {} 
class C 
{ 
    public static implicit operator A(B source) { return new A(); } 
} 

Dies kompiliert:

class A {} 
class B 
{ 
    public static implicit operator A(B source) { return new A(); } 
} 

wird also diese:

class A 
{ 
    public static implicit operator A(B source) { return new A(); } 
} 
class B {} 
+0

Vielen Dank für diese Erklärung . Es sieht so aus, als ob TemplateControl Teil von System.Web.UI ist. Macht dies einen Unterschied in der Handhabung des obigen Fehlers? – SidC

+0

@SidC Entschuldigung, aus irgendeinem Grund habe ich diesen Kommentar früher verpasst. Die Tatsache, dass TemplateControl eine Framework-Klasse ist, bedeutet, dass Sie die Konvertierung von "PaymentProcessor" zu "TemplateControl" in der "PaymentProcessor" -Klasse definieren müssen, da sie entweder dort oder in der 'TemplateControl'-Klasse sein muss, aber Sie können ' t Ändern Sie die Klasse 'TemplateControl'. Wenn Sie 'PaymentProcessor' auch nicht ändern können, könnten Sie eine Erweiterungsmethode schreiben, um den Null-Check zu behandeln. – phoog