2016-06-10 2 views
0

Извините, если подобный вопрос размещен здесь. Я не мог найти этот ответ нигде, но, возможно, мог бы, если бы знал, какие ключевые слова искать.Именование переменной в цикле

Я пытаюсь назвать переменную в цикле for или найти альтернативный способ решения моей проблемы. Вот пример того, что я пытаюсь сделать.

for (int i = 0; i < 100; i++) 
{ 
    string strName = "ImportedBody" + (i+1).ToString(); 
    IBody strName = model.GetEntity(strName) as IBody; 
} 

По сути, моя цель состоит в том, чтобы сократить:

IBody ImportedBody1 = model.GetEntity("ImportedBody1") as IBody; 
IBody ImportedBody2 = model.GetEntity("ImportedBody2") as IBody; 
IBody ImportedBody3 = model.GetEntity("ImportedBody3") as IBody; 
IBody ImportedBody4 = model.GetEntity("ImportedBody4") as IBody; 
IBody ImportedBody5 = model.GetEntity("ImportedBody5") as IBody; 
IBody ImportedBody6 = model.GetEntity("ImportedBody6") as IBody; 
... 
IBody ImportedBody100 = model.GetEntity("ImportedBody100") as IBody; 

в цикл или что-то, что делает, что быстрее писать.

Это может также измениться, если это проблема. Например:

IBody ImportedBody1a = model.GetEntity("ImportedBody1") as IBody; 
IBody ImportedBody2a = model.GetEntity("ImportedBody2") as IBody; 
IBody ImportedBody3a = model.GetEntity("ImportedBody3") as IBody; 
IBody ImportedBody4a = model.GetEntity("ImportedBody4") as IBody; 
IBody ImportedBody5a = model.GetEntity("ImportedBody5") as IBody; 
IBody ImportedBody6a = model.GetEntity("ImportedBody6") as IBody; 
... 
IBody ImportedBody100a = model.GetEntity("ImportedBody100") as IBody; 

Вот несколько замечаний о том, что должна делать эта программа. Программа, которую я пишу, взаимодействует с программой САПР. Если я импортировать геометрию в CAD, то у меня есть список органов, названных «ImportedBody1, ImportedBody2, ImportedBody3 и т.д .. Для того, чтобы отредактировать это тело в моей C# программы я должен получить, что из программы CAD с помощью:

IBody Name = model.GetEntity(StringNameAsLabeledWithinCAD) as IBody; 

Теперь я могу делать вещи, как изменить направление, в котором он сталкивается:

Name.SetNormalDirection(0, 1, 0); 
+7

Это звучит как работа для коллекции , а не отдельные переменные. – David

+8

Просто используйте массив или 'List ' вместо этого. Почему вы думаете, что вам действительно нужны 100 переменных? –

ответ

3

Я пытаюсь назвать переменную внутри для цикла

простой answe r ... нет.

Это работа для коллекций (массивов, списков и т. Д.), А не отдельных переменных. Что-то, возможно, так же просто, как это:

var importedBodies = new List<IBody>(); 
for (int i = 1; i <= 100; i++) 
{ 
    var name = string.Format("ImportedBody{0}", i); 
    var body = model.GetEntity(name) as IBody; 

    importedBodies.Add(body); 
} 

После чего вы бы коллекцию под названием importedBodies, который содержит ваши 100 экземпляров. Вы можете напрямую ссылаться на конкретный один с индексом, такие как:

importedBodies[10] // The 11th imported body 

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

importedBodies.Where(b => b.SomeProperty = "some value") // or any other expressions to query/transform the values 
+0

Вам не хватает токена для 'string.Format (« ImportedBody », i)'. Я думаю, вы имеете в виду 'string.Format (« ImportedBody {0} », i)' :) –

+0

@ да-приятель: Хороший улов, спасибо! – David

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