我想把B级的array[i]
送到我的A级。
在B班我有:
public array getArray() {
return array[i];
}
如何才能获得完整的array
才能使其发挥作用?
combobox1.items.add(getArray());
我正在尝试这个,但它不起作用。您能否回答一下代码示例,它解释了发送和获取array[i]
的不同类中的两种方法。
答案 0 :(得分:1)
您需要授予class A
访问整个数组的权限,而不仅仅是单个值。例如
class B {
Object[] _array;
public Object[] GetArray() {
return _array;
}
}
现在class A
可以使用所有元素并完全填充组合框
foreach (object element in classBInstance.GetArray()) {
combobox1.Items.Add(element);
}
答案 1 :(得分:-1)
你必须遍历你的数组:
foreach(var item in GetArray())
{
combobox1.Items.Add(item);
}
答案 2 :(得分:-1)
你的例子,你有我,但它没有在任何地方发起,你需要像这样传递:
public array getArray(int i)
{
return array[i];
}
combobox1.items.add(getArray(5));
答案 3 :(得分:-1)
你的问题不是很清楚,所以我会根据我的理解来回答你的问题。
class A
{
string[] array;
public string[] GetArray() { return array; }
}
然后你可以编写这样的代码来填充组合框
A items = new A();
// fill in array in A
comboBox1.DataSource = items.GetArray();
或
foreach(string item in items)
{
comboBox1.Items.Add( item );
}
我一直使用DataSource
成员设置列表,尤其是从enum
转到字符串时。
示例:强>
comboBox1.DataSource = System.Enum.GetNames(typeof(System.DayOfWeek));
答案 4 :(得分:-2)
虽然其他答案在技术上有效,但在我看来,不应该直接返回内部数组,因为它违背了面向对象编程中的良好实践。所以我要么在该类中实现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类中添加“Do with values”功能。然后我们只提供委托。例如:
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));
}
}
下一个(第三个)示例显示如何使用foreach使整个ClassB可枚举:
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();
}
}
更新:正如ja72所示,这个简单的技术只发布内部数组的枚举器,不会物理隐藏数组,因为生成的IEnumerator可以转换回int []。
更新#2:我的兄弟总是使用Clone()来返回数组的副本。这是最慢的,但他说这几次挽救了他的职业生涯(他在团队中的一个更大的项目上工作)。