2011-05-15 7 views
11

में रूपांतरण समस्या टाइप करें मैं PowerShell स्क्रिप्टिंग के लिए बहुत नया हूं और Function के साथ प्रयोग कर रहा था। इस कोड को मैंने लिखा है:PowerShell फ़ंक्शन

Function Add 
{ 
    $sum = 0; 
    for($i = 0; $i -le $args.length; ++$i) 
    { 
    [int] $num = $args[$i] 
    $sum += $num 
    } 
    Write-Output "Sum is $sum" 
} 

और मैं Add 1,2,3 का उपयोग कर कॉल करने की कोशिश। हालांकि, जब मैं निष्पादित करता हूं तो मुझे निम्न त्रुटि मिलती है:

Cannot convert the "System.Object[]" value of type "System.Object[]" to type "System.Int32".

कोई विचार यह कैसे ठीक करें?

उत्तर

18

बिग जाल PowerShell में "," सरणी ऑपरेटर सिर्फ आदेश पंक्ति पर कोशिश है: तो कॉल करने के लिए कोशिश

PS> 1,2,3 

आप सरणी

PS> (1,2,3).gettype() 
IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Object[]         System.Array 

देखेंगे:

PS> Add 1 2 3 
Sum is 6 

और कभी भी मत भूलना पॉव में ऑब्जेक्ट है ershell आप नेट के ऊपर

तो तुम मिल गया है दो freinds खेल रहे हैं:

  1. gettype() विधि है जो आप एक वस्तु
  2. Get-Member cmdlet के प्रकार है जो आप पर मदद देता है गुण, और किसी ऑब्जेक्ट के तरीके

गेट-सदस्य के पास कई पैरामीटर हैं जो मदद कर सकते हैं।

 
$num = [int] $args[$i] 

इससे आपकी समस्या हो सकता है:

+0

धन्यवाद ..मैं सी ++ पृष्ठभूमि से हूं और ',' – Naveen

3

कास्टिंग सामान्य रूप से दाहिने हाथ की ओर पर प्रकार असाइन किया जाता है?


दूसरा अवलोकन:

@JPBlanc मनाया गया है, जब आप अपने समारोह, नहीं तीन मापदंडों के लिए एक सरणी से गुजर रहे हैं। उपयोग करें:

 
Add 1 2 3 

और आपको यह मिल जाएगा। वैसे भी, आपको इस स्थिति में कास्टिंग की आवश्यकता नहीं है। इस में हो सकता है:

 
Add "1" "2" "3" 

जाहिर है आप Add 1,2,3 की तरह अपने फ़ंक्शन को कॉल रख सकते हैं, लेकिन आप इस प्रकार उसे बदलना चाहते हैं:

 
Function Add { 
    args[0] | % {$sum=0}{$sum+=$_}{write-output "Sum is $sum"} 
} 
+0

द्वारा अलग पैरामीटर के साथ फ़ंक्शन कॉल करने से पहले दो बार नहीं सोचा था। कुछ और देखें Empo @Naveen ने एक नई त्रुटि बनाई है, जिसमें गुजरने वाले पैरामीटर के बावजूद पैरामीटर के रूप में एक सरणी के साथ कॉल करने का प्रयास किया गया है। – JPBlanc

+0

हां, नई त्रुटि या सी # प्रवासी गलती :) –

+0

आपको पैरामीटर के साथ ऑब्जेक्ट विधियों को कॉल करते समय भी "," की आवश्यकता होगी। यह वास्तव में शक्तियों में किसी भी जाल या किसी भी लंगू से आ रहा है। – JPBlanc

0

कोड है जो काम करता है और कैसे संभाल करने से पता चलता रूपांतरण समस्याओं को नीचे दिखाया गया है

$args = 1,12,13,14,15,16 
[int]$sum = 0; 
for($i = 0; $i -le $args.length; ++$i) 
{ 
    [int] $num = $args[$i] 
    $sum += $num 
} 
Write-Output "Sum is $sum" 

आशा है कि इससे मदद मिलती है!