2012-06-07 32 views
9

में गतिशील रूप से वस्तुओं का निर्माण करना मेरे पास तारों की एक सरणी है जिसे मैं लूपिंग कर रहा हूं। मैं सरणी के माध्यम से और प्रत्येक पुनरावृत्ति पर लूप करना चाहता हूं, स्ट्रिंग मान से मेल खाने वाले नाम के साथ एक नई वस्तु बनाएं।लूप

उदाहरण के लिए;

string[] array = new string[] { "one", "two", "three" }; 

class myClass(){ 

    public myClass(){ 
    } 
} 

foreach (string name in array) 
{ 
    myClass *value of name here* = new myClass(); 
} 

परिणामस्वरूप "ऑब्जेक्ट", "दो" और "तीन" नामों के साथ तीन वस्तुओं को तुरंत चालू किया जाएगा।

क्या यह संभव है या बेहतर समाधान है?

+0

क्यों आपको लगता है कि मुझे क्या करना होगा? क्या आप क्लास इंस्टेंस को सरणी में नहीं डाल सकते हैं, या शायद एक शब्दकोश ? – Joshua

उत्तर

10

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

शब्दकोश बजाय का उपयोग करें: http://ideone.com/vChWD

using System; 
using System.Collections.Generic; 

class myClass{ 

    public string Name { get; set; } 
    public myClass(){ 
    } 
} 

class MainClass 
{ 

    public static void Main() 
    { 
     string[] array = new string[] { "one", "two", "three" }; 
     IDictionary<string,myClass> col= new Dictionary<string,myClass>(); 
     foreach (string name in array) 
     { 
       col[name] = new myClass { Name = "hahah " + name + "!"}; 
     } 

     foreach(var x in col.Values) 
     { 
       Console.WriteLine(x.Name); 
     } 

     Console.WriteLine("Test"); 
     Console.WriteLine(col["two"].Name); 
    } 
} 

आउटपुट:

hahah one! 
hahah two! 
hahah three! 
Test 
hahah two! 
+0

यह भी प्रदर्शित करने के लिए धन्यवाद कि प्रत्येक ऑब्जेक्ट के गुणों का उपयोग कैसे करें :) – user469453

4

जबकि अन्य ने आपको वैकल्पिक विकल्प दिया है लेकिन कोई भी नहीं बता रहा है कि वे आपको इसकी सलाह क्यों देते हैं।

ऐसा इसलिए है क्योंकि आप गतिशील नामों के साथ ऑब्जेक्ट तक नहीं पहुंच सकते हैं।

(सोचा के लिए खाद्य: बस एक पल के लिए लगता है कि अगर आप ऐसा करते हैं सकता है, आप उन्हें कैसे उपयोग करेंगे इससे पहले कि वे भी नामित कोडित रहे हैं /।)

इसके बजाय बनाने के एक Dictionary<string, myClass> के रूप में दूसरों का उल्लेख किया।

4

उपयोग एक Dictionary<String, myClass> बजाय:

var one = dict["one"]; 

या एक पाश में:

var dict= new Dictionary<String, myClass>(); 

foreach (string name in array) 
{ 
    dict.Add(name, new myClass()); 
} 

अब आप अपने नामों से myClass उदाहरणों का उपयोग कर सकते

foreach (string name in array) 
{ 
    myClass m = dict[ name ]; 
} 
0

ऐसा लगता है कि आप की जरूरत आपकी वस्तुओं के शब्दकोश की एक सूची:

var myClassDictionary = new Dictionary<string,myClass>(); 

foreach (string name in array) 
{ 
    myClassDicationry.Add(name, new myClass()); 
} 

// usage: 
// myClass["one"] <- an instance of myClass 

कोई प्रोग्रामिंग भाषा नहीं है जो मुझे पता है कि आप रनटाइम में चर नामों को परिभाषित करने देते हैं।

0

आप कुछ इस तरह कर सकता है -

Dictionary<string, myClass> classes = new Dictionary<string, myClass>(); 

foreach(string name in array) 
{ 
    classes[name] = new myClass(); 
} 

तो फिर तुम नामित उदाहरणों का उल्लेख बाद में

classes[name].MyClassMethod(); 
0

आप नीचे दिए गए कोड का उपयोग कर सकते कर सकते हैं।

string[] array = new string[] { "one", "two", "three" }; 
Dictionary<String, myClass> list; 
class myClass(){ 

    public myClass(){ 
    list = new Dictionary<String, myClass>(); 
    } 
} 

foreach (string name in array) 
{ 
    list.Add(name, new myClass()) 
} 
0

आप वस्तुओं को स्टोर करने सूचियों का उपयोग करें ताकि आप उपयोग कर सकते हैं उन्हें

list<myClass> myClasses = new List<myClass>(); 
foreach (myClass object in myClasses) 
{ 
    //preform interaction with your classes here 
} 
0

सी # करने के लिए लागू नहीं होता, या उस बात के लिए किसी भी स्थिर टाइप भाषा।

जिज्ञासा के लिए, मैंने कोशिश की कि मुझे PHP में क्या याद आया (ऑन-द-फ्लाई चर) बनाना अभी भी सही है।

यह अभी भी वही PHP है, आखिरकार मैंने इसका इस्तेमाल किया था, यह साल 2000 था। आप ऑन-द-फ्लाई वैरिएबल जेनरेट कर सकते हैं, यह कहकर सलाह नहीं दी जाती है कि यह वैश्विक चर को प्रदूषित करता है, यह कुछ मौजूदा चर या ऑब्जेक्ट को दूषित कर सकता है नाम।

http://ideone.com/Xkpo1

<?php 

class MyClass 
{ 
    private $v; 
    function __construct($x) { 
     $this->v = $x; 
    } 
    public function getValue() { 
     return $this->v; 
    } 
} 

$one = new MyClass("I'm tough!"); 

echo "The one: " . $one->getValue() . "\n"; 

$i = 0; 
foreach(array("one","two","three") as $h) { 
    $$h = new MyClass("Says who? " . ++$i); 
} 

echo "The one: " . $one->getValue() . "\n"; 

echo $two->getValue() . "\n"; 
echo $three->getValue() . "\n"; 

?> 

आउटपुट:

The one: I'm tough! 
The one: Says who? 1 
Says who? 2 
Says who? 3