2010-05-23 14 views
15

ज़रूर, यहां तक ​​कि मैं यह कर सकता ...संदर्भ द्वारा एक सरणी एक proc में पारित कर दिया पर एक SetLength कर

var 
    testarray : array of string; 

setlength(testarray, 5); 

लेकिन मैं चालाक हो और एक प्रक्रिया है जो में मैं द्वारा सरणी पारित करना चाहते हैं, तो इस तरह का संदर्भ मैं इसे नहीं कर सकता!

procedure DoStuffWithArray(var passedarray : array of string); 
begin 
    setlength(passedarray, 5); 
end; 

कंपाइलर मेरी proc में कोड की एक पंक्ति पर 'असंगत प्रकार' कहता है।

मैं सेट सेट तत्व मानों जैसे सरणी पर अन्य सामान कर सकता हूं यदि मैं proc को कॉल करने से पहले एक सेटलेथेंथ करता हूं, लेकिन मैं अपनी proc में setlength नहीं कर सकता, जो मैं करना चाहता हूं।

किसी भी मदद की बहुत सराहना की, धन्यवाद।

उत्तर

16

पैरामीटर के रूप में ऐरे प्रकारों का नाम होना आवश्यक है। तो:

type TStringArray = array of string; 
procedure DoStuffWithArray(var passedarray: TStringArray); 

फिर यह काम करेगा।

लेकिन यदि आपको तारों के गतिशील रूप से आकार वाले समूह की आवश्यकता है, तो आपको शायद किसी भी प्रकार का उपयोग करने के लिए एक TStringList आसान लगेगा।

+0

आपको बहुत मेसन धन्यवाद :) – csharpdefector

+2

@Csharpdefetor - यदि आपको मेसन का जवाब पसंद है (जो एक अच्छा है) तो आपको इसे स्वीकार करना चाहिए। आपको भी प्रतिनिधि बोनस मिलेगा। –

+2

यह डेल्फी के वाक्यविन्यास में ऐतिहासिक क्विर्क के कारण है, जिसमें यह खुले सरणी पैरामीटर के लिए समान वाक्यविन्यास का उपयोग करता है। Http://stackoverflow.com/questions/2112729/biggest-delphi-nitpicks/2113650#2113650 देखें –

संबंधित मुद्दे