题
虽然也许帕劳群的事情要做,我需要建立一系列中。净额下限>0.这一似乎是可能的,使用:
Array.CreateInstance(typeof(Object), new int[] {2}, new int[] {9});
产生期望的结果(一系列的对象一下限定为9).然而创建的阵列的实例不能再通过其他方法预计 Object[]
给我一个错误说:
System.Object[*]
不能投入 System.Object[]
.这是什么差别在列类型以及如何克服这个吗?
编辑:测试码=
Object x = Array.CreateInstance(typeof(Object), new int[] {2}, new int[] {9});
Object[] y = (Object[])x;
哪个失败:"无法投对象的类型系统。目[*]'type'系统。目[]'."
我还要注意,这种方法 做 工作时使用多个方面:
Object x = Array.CreateInstance(typeof(Object), new int[] {2,2}, new int[] {9,9});
Object[,] y = (Object[,])x;
其工作的罚款。
其他提示
为什么你不能从一个到另一个是,这是邪恶的。
可以说,你创建一系列的对象[5..9]和你通过它来一个函数F作为对象[].
怎么会功能都知道,这是一个5..9?F期待一个一般阵列,但它越来越受约束的一个。你可以说这有可能它知道,但是这仍然是意外和人民的不想让所有的排序的边界检查每次他们想用一个简单的阵列。
阵列是最简单的结构编程,使其过于复杂,使得它unsusable.你可能需要另一个的结构。
什么你chould做的是一类的,是一个限制集合模仿的行为你想要的。这样,所有用户的这类会知道什么期望。
class ConstrainedArray<T> : IEnumerable<T> where T : new()
{
public ConstrainedArray(int min, int max)
{
array = new T[max - min];
}
public T this [int index]
{
get { return array[index - Min]; }
set { array[index - Min] = value; }
}
public int Min {get; private set;}
public int Max {get; private set;}
T[] array;
public IEnumerator<T> GetEnumerator()
{
return array.GetEnumarator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return array.GetEnumarator();
}
}
我不知道为什么这不可能是通过为对象[],但不会是容易的,如果你只是创建一个真正的类包装一系列与处理你的"奇怪的逻辑",在那里?
你会得到的好处,使用一个真正的参照对象你们可以添加"智能"你的类。
编辑:你是如何铸造你们的阵列,你可以发布一些更多的代码?谢谢。
只要储存你的下限在一个常数偏整数,减去那值什么你源的返回作为索引。
也:这是一个古老的维生素b6功能。我认为有可能是一个属性,以帮助支持它。
不隶属于 StackOverflow