2012-09-25 25 views
6

Ich habe eine Funktion mit zwei festen Argumenten. Aber die nächsten Argumente sind nicht festgelegt, es können zwei, drei oder vier sein.So übergeben Sie optionale Argumente

Es ist eine Laufzeit Argumente, wie kann ich diese Funktion definieren?

Mein Code sieht so aus:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, dynamic arguments comming it should be 2 or 3) 
     { 

     return null; 
    } 
+0

mayby ​​das etwas für Sie ist ?: http://csharp.net-tutorials.com/classes/method-overloading/ – Mathlight

Antwort

12

1) params (C# Reference)

public ObservableCollection<ERCErrors>ErrorCollectionWithValue 
       (string ErrorDode, int MulCopyNo, params object[] args) 
{ 
    //... 
} 

2) Named and Optional Arguments (C# Programming Guide)

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, object arg1 = null, int arg2 = int.MinValue) 
{ 
    //... 
} 

3) Und vielleicht einfache Methode overloading würde noch besser passen, Verfahren Logik zu verschiedenen Methoden zu trennen? Unter diesem Link können Sie auch

5

Ein Ansatz Methoden haben, überlastet ist

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1) 
{ 
    //do some thing with param1 
} 

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1,int param2) 
{ 
    //do some thing with param1 and param3 
} 

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1, int param2, int param3) 
    { 
       //do some thing with param1, param2 and param3 
    } 

diese dann alle gültig sein

var err = ErrorCollectionWithValue("text", 10, 1); 
var err = ErrorCollectionWithValue("text", 10, 1,2); 
var err = ErrorCollectionWithValue("text", 10, 1,2,3); 

Ein weiterer Ansatz ist optionale Parameter zu verwenden . Damit benötigen Sie nur eine Methode im Gegensatz zu den 3 im ersten Ansatz.

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1 = 0, int param2 = 0, optional int param3 = 0) 
{ 

} 

diese noch gültig

sind
var err = ErrorCollectionWithValue("text", 10, 1); //defaults param2 and param3 to 0 
var err = ErrorCollectionWithValue("text", 10, 1,2); //defaults param3 to 0 
var err = ErrorCollectionWithValue("text", 10, 1,2,3); 

einem der optionalen Parameter zu überspringen, müssen Sie named parameters und this verwenden, die C# 4.0 nur unterstützt wird, in und über

var err = ErrorCollectionWithValue("text", param3: 5); //skipping param1 and param2 

In Bei den anderen beiden Ansätzen können Sie die Reihenfolge der Parameter nicht überspringen.

2

eine andere Beschreibung von Namen und optionale Parameter finden Sie mit params, wenn die Anzahl der Argumentation gehen könnte variieren:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue(string errorCode, int num, params object[] args) 
{ 
    foreach(object obj in args) 
{ 
    //process args. 
} 
} 
+0

Danke das ist es was ich will. –

Verwandte Themen