【发布时间】:2015-08-05 23:10:06
【问题描述】:
我有一个函数可以生成其中包含不同数据的对象(该函数根据类型用随机数据填充对象)。该函数返回一个object[],因为类型只在运行时知道(并且它作为参数传递给函数)。
double[] values;
values = factory.GetData(typeof(double), 10);
不幸的是,我得到一个编译器错误:
无法从 object[] 转换为 double[]。
如何以编程方式投射object[]?
编辑:
这是原来的功能:
public object[] GetData(Type type, int howMany)
{
var data = new List<object>();
for (var i = 0; i < howMany; i++)
{
data.Add(Convert.ChangeType(GetRandom(type), type));
}
return data.ToArray();
}
其中GetRandom() 创建一个type 类型的对象并为其分配一个随机值(随机整数、随机字符串、随机双精度、仅基本类型)
这是 GetRandom() 函数:
public T GetRandom<T>()
{
var type = typeof(T);
if (type == typeof(int))
{
return prng.Next(0, int.MaxValue);
}
if (type == typeof(double))
{
return prng.NextDouble();
}
if (type == typeof(string))
{
return GetString(MinStringLength, MaxStringLength);
}
if (type == typeof(DateTime))
{
var tmp = StartTime;
StartTime += new TimeSpan(Interval * TimeSpan.TicksPerMillisecond);
return tmp;
}
}
【问题讨论】:
-
有什么理由不使用泛型?
-
没有充分的理由,请您详细说明一下吗?
-
我会将
GetData定义为:public T[] GetData<T>(int count);这样您就可以从方法中得到正确的类型。 -
我试过了,但它说:“无法将表达式类型 object[] 转换为返回类型 T[]”
-
不,您还需要在方法内部创建一个 T 数组。由于您没有展示该方法如何根据类型实际生成随机数据,因此很难更好地解释您将如何编写它。