सभी संभावित सरणी प्रारंभ सिंटैक्स


जवाबों:


776

ये एक साधारण सरणी के लिए वर्तमान घोषणा और आरंभीकरण विधियाँ हैं।

string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2

ध्यान दें कि सरणियाँ प्राप्त करने की अन्य तकनीकें मौजूद हैं, जैसे कि लाइनक ToArray()एक्सटेंशन IEnumerable<T>

यह भी ध्यान दें कि उपरोक्त घोषणाओं में, पहले दो string[]बाईं ओर var(C # 3+) से बदल सकते हैं, क्योंकि दाईं ओर की जानकारी उचित प्रकार का अनुमान लगाने के लिए पर्याप्त है। तीसरी पंक्ति को प्रदर्शित किया जाना चाहिए, क्योंकि सरणी आरंभीकरण सिंटैक्स अकेले संकलक की मांगों को पूरा करने के लिए पर्याप्त नहीं है। चौथा भी अनुमान का उपयोग कर सकता है। तो अगर आप पूरी संक्षिप्तता में हैं, तो ऊपर लिखा जा सकता है

var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2 

1
जिज्ञासा से बाहर, क्या कोई समझा सकता है कि तीसरी पंक्ति में प्रारंभिक अभिव्यक्ति का उपयोग स्वयं क्यों नहीं किया जा सकता है (उदाहरण के लिए एक विधि में पारित) या एक varचर को सौंपा जाए ?
Ruben9922

1
@ Ruben9922: दिलचस्प सवाल। यह समझ में आता है कि var x = {}सरणी आरोइज़र एरेज़ के अलावा और कुछ भी प्राप्त कर सकता है, लेकिन यह काम नहीं करता है, लेकिन मुझे नहीं पता कि वह क्या है। इसलिए मुझे लगता है कि सरणी इनिशलाइज़र एक भाषा सुविधा है। यदि आप इसके साथ new List<string> {"A", "B"}इसका उपयोग करते हैं, तो इससे कुछ अलग भी होता है।
TvdH

441

C # में सरणी निर्माण सिंटैक्स अभिव्यक्त होते हैं:

new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }

पहले एक में, आकार किसी भी गैर-नकारात्मक अभिन्न मूल्य हो सकता है और सरणी तत्वों को डिफ़ॉल्ट मानों के लिए प्रारंभ किया जाता है।

दूसरे में, आकार एक स्थिर होना चाहिए और दिए गए तत्वों की संख्या मेल खाना चाहिए। दिए गए तत्व तत्व प्रकार में दिए गए तत्वों से एक अंतर्निहित रूपांतरण होना चाहिए।

तीसरे में, तत्वों को स्पष्ट रूप से तत्व प्रकार के लिए परिवर्तनीय होना चाहिए, और आकार दिए गए तत्वों की संख्या से निर्धारित होता है।

चौथे एक प्रकार के सरणी तत्व में सबसे अच्छे प्रकार की गणना करके अनुमान लगाया जाता है, यदि सभी दिए गए तत्वों में से एक, प्रकार है। सभी तत्वों को उस प्रकार से स्पष्ट रूप से परिवर्तनीय होना चाहिए। आकार दिए गए तत्वों की संख्या से निर्धारित होता है। यह सिंटैक्स C # 3.0 में पेश किया गया था।

एक वाक्यविन्यास भी है जिसका उपयोग केवल घोषणा में किया जा सकता है:

int[] x = { 10, 20, 30 };

तत्वों का निहितार्थ तत्व प्रकार में परिवर्तनीय होना चाहिए। आकार दिए गए तत्वों की संख्या से निर्धारित होता है।

वहाँ एक सभी में एक गाइड नहीं है

मैं आपको C # 4.0 विनिर्देशन, खंड 7.6.10.4 "ऐरे क्रिएशन एक्सप्रेशंस" का संदर्भ देता हूं।


8
@ बॉलकॉक: आपके द्वारा उल्लिखित पहला सिंटैक्स एक "अंतर्निहित रूप से टाइप किए गए एरे क्रिएशन एक्सप्रेशन" है। दूसरा एक "अनाम वस्तु निर्माण अभिव्यक्ति" है। आप अन्य दो समान सिंटैक्स को सूचीबद्ध नहीं करते हैं; वे "ऑब्जेक्ट इनिलाइज़र" और "कलेक्शन इनिशलाइज़र" हैं।
एरिक लिपर्ट

11
बिल्कुल सी # "सिंटैक्स" नहीं है, लेकिन चलो (मेरे व्यक्तिगत पसंदीदा) को मत भूलना Array.CreateInstance(typeof(int), 3)!
जेफरी एल व्हाइटलेज

17
@ जेफ्री: यदि हम उस सड़क से नीचे जा रहे हैं, तो यह मूर्खतापूर्ण होने लगती है। जैसे "1,2,3,4".split(','),।
ब्रायन

11
तब बहुआयामी सरणियों के लिए, वहाँ मौजूद "नेस्टेड" अंकन की तरह new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };है, और इसलिए के लिए पर int[,,], int[,,,]...
Jeppe स्टिग नीलसन

6
@ लर्निंग-ओवरथिंकर-भ्रमित: आपके पास दो घोड़े हैं। आप जानना चाहते हैं कि कौन सा तेज है। क्या आप (1) घोड़ों की दौड़ लगाते हैं, या (2) इंटरनेट पर किसी अजनबी से पूछते हैं कि उसने कभी उन घोड़ों को नहीं देखा, जिन्हें वह समझता है कि वह तेज है? अपने घोड़ों की दौड़ । आप जानना चाहते हैं कि कौन सा अधिक "कुशल" है? पहले दक्षता के लिए एक औसत दर्जे का मानक बनाएं; याद रखें, दक्षता प्रति यूनिट लागत पर उत्पादित मूल्य है , इसलिए अपने मूल्य और लागत को सावधानीपूर्वक परिभाषित करें। फिर दोनों तरीकों से कोड लिखें और इसकी दक्षता को मापें। अनुमानों के लिए यादृच्छिक अजनबियों से न पूछकर , वैज्ञानिक सवालों के जवाब देने के लिए विज्ञान का उपयोग करें
एरिक लिपर्ट

111

गैर-खाली सरणियाँ

  • var data0 = new int[3]

  • var data1 = new int[3] { 1, 2, 3 }

  • var data2 = new int[] { 1, 2, 3 }

  • var data3 = new[] { 1, 2, 3 }

  • var data4 = { 1, 2, 3 }संकलन योग्य नहीं है। int[] data5 = { 1, 2, 3 }इसके बजाय उपयोग करें ।

खाली सरणियाँ

  • var data6 = new int[0]
  • var data7 = new int[] { }
  • var data8 = new [] { } और int[] data9 = new [] { }अनिवार्य नहीं हैं।

  • var data10 = { }संकलन योग्य नहीं है। int[] data11 = { } इसके बजाय उपयोग करें ।

एक विधि के तर्क के रूप में

केवल अभिव्यक्तियाँ जिन्हें varकीवर्ड के साथ सौंपा जा सकता है, उन्हें तर्कों के रूप में पारित किया जा सकता है।

  • Foo(new int[2])
  • Foo(new int[2] { 1, 2 })
  • Foo(new int[] { 1, 2 })
  • Foo(new[] { 1, 2 })
  • Foo({ 1, 2 }) संकलन योग्य नहीं है
  • Foo(new int[0])
  • Foo(new int[] { })
  • Foo({}) संकलन योग्य नहीं है

14
अधिक स्पष्ट रूप से अमान्य सिंटैक्स को मान्य लोगों से अलग करना अच्छा होगा।
jpmc26

क्या दिए गए उदाहरण पूर्ण हैं? क्या कोई और मामला है?
मनी ओरिएंटेड प्रोग्रामर

49
Enumerable.Repeat(String.Empty, count).ToArray()

बार-बार 'काउंट' करने वाले खाली तारों की व्यूह रचना करेंगे। मामले में आप उसी समान विशेष डिफ़ॉल्ट तत्व मान के साथ सरणी को इनिशियलाइज़ करना चाहते हैं। संदर्भ प्रकारों के साथ सावधान, सभी तत्व समान ऑब्जेक्ट को संदर्भित करेंगे।


5
हां, var arr1 = Enumerable.Repeat(new object(), 10).ToArray();आपको एक ही वस्तु के 10 संदर्भ मिलते हैं। 10 अलग-अलग ऑब्जेक्ट बनाने के लिए, आप उपयोग var arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();या समान कर सकते हैं ।
जेपी स्टिग नील्सन

20
var contacts = new[]
{
    new 
    {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new 
    {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

आपको इस संरचना का उपयोग कैसे करना चाहिए? क्या यह एक शब्दकोश की तरह है?
आर। नवेगा

1
@ R.Navega यह एक साधारण व्यूह है :)
grooveplex

17

यदि आप पूर्व-आरंभिक समान (गैर- nullया अन्य default) तत्वों के एक निश्चित सरणी को आरम्भ करना चाहते हैं, तो इसका उपयोग करें:

var array = Enumerable.Repeat(string.Empty, 37).ToArray();

कृपया इस चर्चा में भी भाग लें ।


13

एक कस्टम वर्ग की एक सरणी बनाने के लिए उदाहरण

नीचे कक्षा की परिभाषा है।

public class DummyUser
{
    public string email { get; set; }
    public string language { get; set; }
}

यह आप सरणी को कैसे शुरू कर सकते हैं:

private DummyUser[] arrDummyUser = new DummyUser[]
{
    new DummyUser{
       email = "abc.xyz@email.com",
       language = "English"
    },
    new DummyUser{
       email = "def@email.com",
       language = "Spanish"
    }
};


6
int[] array = new int[4]; 
array[0] = 10;
array[1] = 20;
array[2] = 30;

या

string[] week = new string[] {"Sunday","Monday","Tuesday"};

या

string[] array = { "Sunday" , "Monday" };

और बहु ​​आयामी सरणी में

    Dim i, j As Integer
    Dim strArr(1, 2) As String

    strArr(0, 0) = "First (0,0)"
    strArr(0, 1) = "Second (0,1)"

    strArr(1, 0) = "Third (1,0)"
    strArr(1, 1) = "Fourth (1,1)"

5
नमस्ते, उदाहरणों का अंतिम ब्लॉक विजुअल बेसिक प्रतीत होता है, प्रश्न सी # उदाहरणों के लिए पूछता है।
एलेक्स कीस्मिथ


2

एक सरणी बनाने और ऑब्जेक्ट को आरंभीकृत करने का दूसरा तरीका। यह उस उदाहरण के समान है जिसे @Amol ने ऊपर पोस्ट किया है , सिवाय इसके कि कोई कंस्ट्रक्टर का उपयोग करता है। बहुरूपता का एक छींटा अंदर छिड़का, मैं विरोध नहीं कर सका।

IUser[] userArray = new IUser[]
{
    new DummyUser("abc@cde.edu", "Gibberish"),
    new SmartyUser("pga@lna.it", "Italian", "Engineer")
};

संदर्भ के लिए कक्षाएं:

interface IUser
{
    string EMail { get; }       // immutable, so get only an no set
    string Language { get; }
}

public class DummyUser : IUser
{
    public DummyUser(string email, string language)
    {
        m_email = email;
        m_language = language;
    }

    private string m_email;
    public string EMail
    {
        get { return m_email; }
    }

    private string m_language;
    public string Language
    {
        get { return m_language; }
    }
}

public class SmartyUser : IUser
{
    public SmartyUser(string email, string language, string occupation)
    {
        m_email = email;
        m_language = language;
        m_occupation = occupation;
    }

    private string m_email;
    public string EMail
    {
        get { return m_email; }
    }

    private string m_language;
    public string Language
    {
        get { return m_language; }
    }

    private string m_occupation;
}

1

नीचे दिए गए वर्ग के लिए:

public class Page
{

    private string data;

    public Page()
    {
    }

    public Page(string data)
    {
        this.Data = data;
    }

    public string Data
    {
        get
        {
            return this.data;
        }
        set
        {
            this.data = value;
        }
    }
}

आप ऊपर दिए गए ऑब्जेक्ट की सारणी को नीचे की तरह आरंभीकृत कर सकते हैं।

Pages = new Page[] { new Page("a string") };

उम्मीद है की यह मदद करेगा।


0

आप डायनामिक एरेज़ भी बना सकते हैं यानी आप इसे बनाने से पहले उपयोगकर्ता से सरणी का आकार पूछ सकते हैं।

Console.Write("Enter size of array");
int n = Convert.ToInt16(Console.ReadLine());

int[] dynamicSizedArray= new int[n]; // Here we have created an array of size n
Console.WriteLine("Input Elements");
for(int i=0;i<n;i++)
{
     dynamicSizedArray[i] = Convert.ToInt32(Console.ReadLine());
}

Console.WriteLine("Elements of array are :");
foreach (int i in dynamicSizedArray)
{
    Console.WriteLine(i);
}
Console.ReadKey();

0

अभिव्यक्ति के साथ तुच्छ समाधान। ध्यान दें कि NewArrayInit से आप केवल एक-आयामी सरणी बना सकते हैं।

NewArrayExpression expr = Expression.NewArrayInit(typeof(int), new[] { Expression.Constant(2), Expression.Constant(3) });
int[] array = Expression.Lambda<Func<int[]>>(expr).Compile()(); // compile and call callback

0

सिर्फ एक नोट

निम्नलिखित सरणियाँ:

string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = { "A" , "B" };
string[] array4 = new[] { "A", "B" };

के लिए संकलित किया जाएगा :

string[] array = new string[2];
string[] array2 = new string[]
{
   "A",
   "B"
};
string[] array3 = new string[]
{
   "A",
   "B"
};
string[] array4 = new string[]
{
   "A",
   "B"
};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.