C# Statische Klasse mit Enum
Ich habe eine knifflige Frage, die wurde verwirren Sie mich für eine Weile. Ich habe den folgenden code Erklärung...
namespace ESEGURCI.WEB.BusinessLogicLayer.Commons
{
public static class ParameterUtilities
{
public enum ParameterEnum
{
MAX_LOGIN_ATTEMPTS,
AUDIT_MODIFICATIONS
}
}
}
und ich rufe den code so wie "ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS" Problem ist, sobald jeder Vollmond bekomme ich die Fehlermeldung "der Objektverweis wurde nicht auf eine Instanz eines Objekts" auf dieser Linie... Es ist wie der code funktioniert nur 99,9% der Zeit...
Das einzige, was mir einfällt, ist, dass seit dem enum ein Werttyp ist, dass es kann eine chance sein, dass die enum ist null, wenn die statische Klasse aufgerufen wird... Aber ich finde keine Dokumentation über dieses Verhalten...
Kann jemand mich aufklären, warum dies geschieht? Ich weiß, ich sollte wahrscheinlich entfernen Sie den enum aus der statischen Klasse, und erklären die enum als standalone, aber ich würde gerne wissen, warum dies geschieht zuerst...
Dank,
S
Update
Ok, an alle, die mehr verlangen-code, der folgende ist die volle Funktion, wo der Fehler Auftritt...
public static int GetPageSize(int companyId)
{
int pageSize = 0;
//error happens bellow this line
ESEGURCI.WEB.BusinessLogicLayer.Entities.Parameter parameter = ESEGURCI.WEB.BusinessLogicLayer.Entities.Parameter.GetParameter(ParameterUtilities.ParameterEnum.AUDIT_MODIFICATIONS.ToString(), companyId);
//error happens above this line
int.TryParse(parameter.Value, out pageSize);
return pageSize;
}
Enum
definition außerhalb der Klasse?Diese Zeile kann nicht werfen mit NullReference, sind Sie sicher, dass der Fehler nicht in anderen Aussagen? bitte zeig mehr code, wie du mit enum-Wert
Die Ausnahme ist entstanden aus etwas, was sonst in die betreffende Zeile, enums kann nicht null sein. Können Sie uns zeigen, die eigentlichen code-block, wo die exception Auftritt ?
Dies kann nicht werfen, null ref exception. Durch die Linie, die Sie erwähnt haben, bedeutet es, dass Sie abholen eine der 2 möglichen Werte für diesen Typ. Diese Linie werfen, null ref exception ist ähnlich wie die Nummer 1 oder die Zeichenfolge "C# ist eine Sprache" wirft, null ref exception. Auch "der Objektverweis wurde nicht auf eine Instanz eines Objekts" bedeutet, dass Sie versuchen, Zugriff auf einen ref-Typ-Objekt, das nicht initialisiert wurde, oder ein Wert zugewiesen. Post code.
Gibt es möglicherweise Problem in GetParameter. Setzen Sie diese Anweisung in einem try-block und fangen Sie die Ausnahme. Auch, wenn Sie die Ausnahme, überprüfen Sie den Wert des enum-und Sie wissen, dass die enum ist nicht das Problem.
InformationsquelleAutor bastos.sergio | 2012-09-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
ParameterUtilities.ParameterEnum.MAX_LOGIN_ATTEMPTS
nicht immer, werfen Sie einen null-Verweis-Ausnahme, egal, was der Mond sieht aus wie. Der Fehler wird wahrscheinlich ausgelöst durch eine andere Anweisung auf der gleichen Zeile (Zuweisung an eine variable?).InformationsquelleAutor Kevin Gosse
Einer
enum
können nichtnull
.Aufteilen der Zeile in die Liste unten und sehen, welche Aussage wirft die Ausnahme. Ich Wette, es passiert irgendwo in
Parameter.GetParameter()
:ESEGURCI.WEB.BusinessLogicLayer.Entities.Parameter
ist eine Art (siehe meine Antwort).wenn
Parameter.GetParameter()
war nicht statisch, es würde nicht funktionieren überhaupt.ja, das habe ich dann irgendwie gemerkt, dass nach re-Lektüre die Frage! Denke immer noch, das problem kommt von der GetParameter-Methode.
Sorry, ESEGURCI.WEB.BusinessLogicLayer.Entitäten, ist ein namespace... ich aktualisierte die Frage entsprechend...
das macht es auch leichter zu finden. Ich aktualisiert meine Antwort entsprechend.
InformationsquelleAutor Dennis Traub
Enum - (und jedem anderen Typ) kann nicht null Wert, denn es ist nicht ein Wert, den es ist ein Typ.
Die Ausnahme ausgelöst wird, durch etwas anderes.
InformationsquelleAutor Fedor Hajdu
Wie gesagt Ihr
enum
nicht, wo der Fehler herkommt. Basierend auf Ihren update, ich würde sagen, die NRE ist wahrscheinlich kommen aus IhrenGetParameter
Methode.Sie denken, dies könnte zurückzuführen sein auf die Erklärung des class-Parameters" - ja, insbesondere die
GetParameter
Methode. Haben Sie einen Blick auf den code in es und überprüfen, ob es irgendwelche Szenarien, in denen eine NRE geworfen werden konnte.Das ist die Sache... Der stacktrace aus meinen logs zeigen nicht den Fehler als Ursprung innerhalb der Parameter-Klasse... Also, was Sie gesagt, macht für mich keinen Sinn... Der Fehler beginnt bei der Funktion GetPageSize und propagiert von dort herunter...
Die folgende Zeile wird nicht werfen eine NRE -
ParameterUtilities.ParameterEnum.AUDIT_MODIFICATIONS.ToString()
daher gibt es nur 2 andere Möglichkeiten, eine NRE inGetParameter
oder es gibtnull
denen Sie dann versuchen, verwenden Sie später in Ihrem code-block. Sie sind felsenfest davon überzeugt, dass der Fehler passiert in dieser Zeile und zwar so, dass lässt mich denken, es ist ein Fehler inGetParameter
.Wie ich sagte, der stacktrace ist sehr klar, die Ausnahme beginnt, Linie... ich denke, der einzige Weg, um richtig zu beheben das wird es sein, fügen Sie mehr auditing-code und warten Sie, bis der Fehler wieder...
InformationsquelleAutor James