Хотя другие ответы технически работают, по моему мнению, никогда не следует возвращать внутренний массив напрямую, поскольку это противоречит передовым методам объектно-ориентированного программирования.Поэтому я бы либо реализовал интерфейс IEnumerable в этом классе, либо, по крайней мере, возвратил бы IEnumerator или IEnumerable, что сделало бы возвращаемую коллекцию доступной только для чтения.
Пример:
class ClassB {
int[] array;
public IEnumerable<int> GetValues() { return array; }
}
class ClassA {
void DoTheJob(ClassB source) {
foreach(int item in source.GetValues()) {
combobox.Items.Add(item);
}
}
}
Другое простое решение - добавитьФункциональность «делать со значениями» для класса B. Затем мы просто предоставляем делегат.Пример:
class ClassB {
int[] array;
public void DoWithValues(Action<int> action) {
foreach(int item in array) action(item);
}
}
class ClassA {
ComboBox combobox;
void DoTheJob(ClassB source) {
source.DoWithValues(item => combobox.Items.Add(item));
}
}
Следующий (третий) пример показывает, как сделать весь ClassB перечисляемым с помощью foreach:
static void Main(string[] args) {
ClassB b = new ClassB();
foreach(int i in b) Console.Write(i + " ");
}
class ClassB : IEnumerable<int> {
int[] array;
public ClassB() {
array = new int[20];
}
public IEnumerator<int> GetEnumerator() {
return (array as IEnumerable<int>).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return array.GetEnumerator();
}
}
update: Как показано в ja72, это простоТехника, которая просто публикует перечислитель внутреннего массива, физически не скрывает массив, поскольку полученный IEnumerator может быть приведен обратно к int [].
update # 2: Мой брат всегда используетClone () для возврата копии массива.Он самый медленный, но он сказал, что это несколько раз спасало его карьеру (он работает над большим проектом в команде).