2010-06-28 4 views
0

У меня есть классДинамическая инициализация в C#

class sampleClass 
{ 
    ........... 
    ........... 
    public sampleClass() 
    {.........} 
} 

и в другом классе я создал массив как

sampleClass[] X=new sampleClass[]{new sampleClass(),new sampleClass()} 

здесь я дал 2 экземпляра конструктора. мне нужно это динамически ..

что размер массива должен быть динамически изменен

+2

Размеры массива не изменяются динамически в C#. Вероятно, вам нужен класс коллекции, возможно, «Список '. – Joey

+1

Вы дадите тот же комментарий всем трем ответам. Это должно предложить вам, что ваш вопрос не дал достаточно подробностей. –

ответ

1

Это звучит, как вы хотите что-то вроде:

int size = // whatever 

SampleClass[] array = new SampleClass[size]; 
for (int i = 0; i < size; i++) 
{ 
    array[i] = new SampleClass(); 
} 

EDIT: Если вы действительно хотите, чтобы избежать a for loop, вы можете сделать что-то вроде:

SampleClass[] array = Enumerable.Range(0, size) 
           .Select(x => new SampleClass()) 
           .ToArray(); 

... но я не думаю, что это на самом деле лучше, чем использование цикла.

+0

не использующий для loop ....? –

+0

@Pramodh: Почему вы хотите избежать цикла for? Это возможно * возможно * с использованием LINQ, но зачем вам это нужно? –

+0

@ Jon Skeet: Я жду этого. linq approch –

0

Это просто синтаксический сахар, вы можете получить то же самое, используя свой собственный код:

sampleClass[] X = new sampleClass[num]; 
for(int i = 0; i < num; i++) 
{ 
    X[i] = new sampleClass(); 
} 
+0

не использует петлевые записи ....? –

+0

@Pramodh, как вам это будет выглядеть? Если он динамический, вы знаете «num» только во время выполнения, поэтому я не понимаю, что именно вы ищете. – Elisha

+0

Значение num является динамическим. в одном случае я дал num = 4. и в случае с ящиком я даю num = 10. поэтому в каждом случае я должен повторять. Только «num» является динамическим.но значение в массиве будет всегда конструктором –

0

Вы можете инициализировать массив с помощью цикла:

sampleClass[] X = new sampleClass[123]; 
for (int i = 0; i < X.Length; ++i) 
    X[i] = new sampleClass(); 

Если ваш класс был значение тип инициализируется массивом, когда он выделен:

struct sampleStruct { ... } 

sampleStruct[] X = new sampleStruct[123]; 
// No need to initialize every array cell. 

Однако, используя структуру вместо ac lass - это не то, что вы должны сделать просто, чтобы избежать цикла. Вы можете узнать больше о value types on MSDN.

+0

не использует записи цикла ...? –

Смежные вопросы