2016-01-12 2 views
0

Так что для целей тестирования мне нужно иметь три IEnumerables типа <T>. Один с двумя ветвями, один с одной ветвью, и один, содержащий только узел. Мне нужно создавать дополнительные тесты в гораздо более крупных древовидных структурах, которые потребуют больше итераций разных IEnumerables. В настоящее время мое (рабочее) решение выглядит примерно так. Но я не могу не думать, что я могу добавлять ветви по одному и устанавливать IEnumerables, равные друг другу на каждом шаге, или что-то подобное, чтобы ускорить процесс. Очевидно, что прямая реализация этого не будет работать, поскольку они являются ссылочными типами, поэтому в любом случае они будут иметь одинаковое значение, и в любом случае это будет довольно беспорядочно, если бы я работал над ним ... оставив меня немного застрявшим. Есть ли способ сделать это менее громоздким способом?Простой способ систематического создания новых узлов?

// Create test IEnumerables for comparison (one full, one with one branch, one of just node) 
List<T> testlistfull, testlist1branch, testlistnode; 
testlistnode = new List<T>(); 
testlistnode.Add(node0); 

testlist1branch = new List<T>(); 
testlist1branch.Add(node0); 
testlist1branch.Add(branch1); 

testlistfull = new List<T>(); 
testlistfull.Add(node0); 
testlistfull.Add(branch1); 
testlistfull.Add(branch2); 

IEnumerable<T> testenumfull = testlistfull as IEnumerable<T>; 
IEnumerable<T> testenum1branch = testlist1branch as IEnumerable<T>; 
IEnumerable<T> testenumnode = testlistnode as IEnumerable<T>; 

ответ

1

Вы можете использовать неявно типизированные массивы. Они выводят свой тип из значений в инициализаторе массива.

IEnumerable<T> testenumfull = new [] {node0, branch1, branch2}; 
IEnumerable<T> testenum1branch = new [] {node0, branch1}; 
IEnumerable<T> testenumnode = new [] {node0}; 

По какой-либо причине они должны быть типа List<T>.

IEnumerable<T> testenumfull = new List<T>{node0, branch1, branch2}; 
IEnumerable<T> testenum1branch = new List<T>{node0, branch1}; 
IEnumerable<T> testenumnode = new List<T>{node0}; 

Вам не нужен as IEnumerable<T> просто как присваивание переменной этого типа будет делать неявное приведение.

+0

Вау, я понятия не имел, что могу это сделать. Благодаря! – HavelTheGreat

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