Frage

Wenn eine Argument Konstruktion, ein paar der Überlastungen nehmen eine Zeichenfolge, die die der ungültigen Argument Parametername ist. Ich meine, es wäre schön, sich nicht daran erinnern müssen, um diese Ctor param zu aktualisieren, wenn ich die param name Methode ändern. Gibt es eine einfache Möglichkeit, diese mit Reflexion zu tun?

Update: dank der 2 Befragten bisher. Sie beide die Frage beantworten, gut, aber die Lösung noch läßt mich mit einem Wartungs Kopfschmerzen. (Okay, ein winzigen Kopfschmerzen, aber immer noch ...) Um zu erklären, wenn ich bin Neuordnungs die params später - oder eine frühere param entfernen - ich würde müssen bedenken, wieder meine Ausnahme-Bau-Code zu ändern. Gibt es eine Möglichkeit ich etwas entlang der Linien von

verwenden können,
Object.ReferenceEquals(myParam, <insert code here>)

sein, dass ich mit den relevanten Parametern zu tun habe? Auf diese Weise würde der Compiler Schritt in schlecht zu verhindern, dass ich die Ausnahme zu konstruieren.

Das heißt, ich bin ab von der ursprünglichen Frage zu vermuten, dass die „einfache“ Teil nicht, dass in Vorbereitung. Vielleicht sollte ich nach oben nur mit Stringliterale verwenden. :)

War es hilfreich?

Lösung

Die Reflexion ist für diese nicht geeignet sind.

Sie werden mit der Erinnerung setzen müssen, um es richtig zu machen.

Zum Glück FxCop (oder Team System-Code-Analyse) werden Ihnen helfen, alle Fehlpaarungen mit dem Hinweis darauf.

Andere Tipps

Sie könnten einen Ausdrucksbaum für diese, die Sie erhalten möchten, dass Sie bei den teuren von irgendeinem seltsamen Syntax wollen. Z.

public void Resize(int newSize)
{
  if (newSize < 1)
  {
    throw new ArgumentException("Blah", NameOfVariable(() => newSize));
  }
  // ... whatever ...
}

Wo NameOfVariable ist wie folgt definiert:

public static string NameOfVariable(Expression<Func<object>> expressionTree)
{
   var expression = (UnaryExpression)expressionTree.Body;
   var memberExpression = (MemberExpression)expression.Operand;
   return memberExpression.Member.Name;
}

Dies hat auch die Möglichkeit, während der Laufzeit des Absturzes, wenn Sie etwas anderes als ein UnaryExpression zu NameOfVariable passieren.

würde ich nicht überrascht, wenn dieser Code auch bewirkt, dass FxCop beschweren, und wie Joe FxCop der wahrscheinlich der beste Weg, dies zu tun, ist mit Nennungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top