2011-11-15 18 views
8

यह है की तरह संभव कुछ लिखने:गतिशील तर्क परिभाषा

function foo(a,b,c) { 
    return a + b + c; 
} 

var args = [2,4,6]; 
var output = foo.apply(this, args); // 12 

सी वहाँ # जावास्क्रिप्ट का .apply करने के लिए एक बराबर?

var output = foo(2, 4, 6); 

या इस तरह::

object foo(params int[] args) { ... } 

फिर आप इस तरह विधि कॉल कर सकते हैं:

+0

क्या आप कोई विशेष फ़ंक्शन सेट अप करने का कोई तरीका ढूंढ रहे हैं ताकि आप एक सरणी को पैरामीटर के रूप में पास कर सकें? या आप पैरामीटर के रूप में सरणी के साथ मनमानी कार्यों को कॉल करने का कोई तरीका देख रहे हैं? –

+0

हटाया गया अभिवादन: "अग्रिम धन्यवाद।", अगली बार ऐसा न करें :) –

उत्तर

13

आप पैरामीटर कीवर्ड का उपयोग कर सकते

var args = new [] {2, 4, 6}; 
var output = foo(args) 
2

थोड़ा समय के बाद से किया गया है मैंने कोई जावास्क्रिप्ट किया है, लेकिन मैं समझता हूं कि apply विधि एक प्रतिनिधि बनाने का एक तरीका है। सी # में ऐसा करने के कई तरीके हैं। मैं कुछ इस तरह के साथ शुरू होगा:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Foo foo = new Foo(); 
     Func<int[], int> SumArgs = foo.AddArgs; // creates the delegate instance 

     // get some values 
     int[] nums = new[] { 4, 5, 6 }; 

     var result = SumArgs(nums); // invokes the delegate 
     Console.WriteLine("result = {0}", result1); 

     Console.ReadKey(); 
    } 
} 

internal class Foo 
{ 
    internal int AddArgs(params int[] args) 
    { 
     int sum = 0; 

     foreach (int arg in args) 
     { 
      sum += arg; 
     } 

     return sum; 
    } 
} 

, LINQ का उपयोग कर एक और तरीका नहीं है foreach के बजाय, आप उपयोग कर सकते हैं:

return args.Sum(); 

अधिक बनाने प्रतिनिधियों पर Func और Action का उपयोग कर।

4
object[] args = new object[] { 2, 4, 6 }; 
this.GetType().GetMethod("foo").Invoke(this, args); 
संबंधित मुद्दे