gpt4 book ai didi

c# - 在 C# 上从 object[] 转换为 double[]

转载 作者:行者123 更新时间:2023-11-30 13:19:05 27 4
gpt4 key购买 nike

我有一个函数可以生成其中包含不同数据的对象(该函数根据类型用随机数据填充对象)。该函数返回一个 object[],因为类型仅在运行时才知道(并且它作为参数传递给函数)。

double[] values;

values = factory.GetData(typeof(double), 10);

不幸的是我得到一个编译器错误:

Cannot convert from object[] to 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 类型的对象并为其分配一个随机值(随机 int、随机字符串、随机 double,仅基本类型)

这是 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;
}
}

最佳答案

使用Array.ConvertAll :

values =  Array.ConvertAll(factory.GetData(typeof(double), 10), item => (double)item);

例子:

object[] input = new object[]{1.0, 2.0, 3.0};
double[] output = Array.ConvertAll(input, element => (double)element); // [1.0, 2.0, 3.0]

请注意,如果其中一项无法转换为双倍,您可能会得到 InvalidCastException

关于c# - 在 C# 上从 object[] 转换为 double[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31834399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com