2016-10-03 3 views
0

Ich würde gerne eine Vielzahl von Argumenten zu einer Methode durch Ref übergeben, aber ich kenne die Anzahl der Argumente nicht.Ist es möglich, Objekte mit ref mit dem Schlüsselwort params zu übergeben?

Ich habe so etwas wie dies versucht, aber ist es nicht funktioniert: D:

public void myMethod(ref params object args) 

ich denke, dass die Zeiger in params passieren aber ist es wenig in C# kompliziert:/

Mögliche Abhilfe?

EDIT:

ich einen Teil des Codes kapseln wollen, im Grunde wie folgt:

....

var collectionA = new List<string>(); 
var myObject = // an object 
Optimizer.Optimize(ref collectionA, ref myObject); // cache 
//{ 

MaClass.Treatment(); // use collectionA stored in cache via Optimizer 

// the collectionA is modified in MaClass.Treatment() 
... 

//} 
Optimizer.EndOptimize(); 
... 

Das Ziel kann mein Server die ganze Zeit für die nicht verlangen, gleiche Behandlung (HTTPRequest), wenn der Anruf in meinem Optimierer eingekapselt wurde

+0

Müssen Sie * wirklich * sie durch ref übergeben? Versuchen Sie, neue Objekte in der Methode zuzuweisen? Oder sind es primitive Typen, denen Sie neue Werte zuweisen? Wenn die Antwort auf beide Fragen "Nein" lautet, müssen Sie wahrscheinlich nicht an ref. –

Antwort

2

Nein, das ist nicht möglich. Sie können jedoch viel der gleichen erhalten, indem das Array in dem Verfahren mutiert, dann einfach die Werte im Call-Ort wieder aus dem Array zu lesen:

var args = new[] {x, y, z} 
obj.myMethod(args); 
x = args[0]; 
y = args[1]; 
z = args[2]; 

(dem trivialerweise auf eine verallgemeinern Anzahl der Argumente nur zur Laufzeit bekannt)

+0

Großartig! ist nicht die beste Lösung für meinen Code, aber ich kannte diesen Trick nicht, danke @MarcGravell – Adwelean

Verwandte Themen