我在这里搜索了前面的问题,但没有完全回答我正在寻找的问题.

我使用PropertyInfo以Object类型的形式通过反射检索基元类型的array.

    Type t = typeof(MyType);    
    PropertyInfo pi = t.GetProperty("Property Name");

    object primitiveTypeArray = pi.GetValue(myObject)

    double[] convertedArray = (double[])primitiveTypeArray; 

此数组只有3种类型(目前),Double、Float或ULong. 仅当primitiveTypeArray对象包含Double[]时,ConvertedArray的这种赋值才会起作用,但如果它是ulong[]的Float[],则会失败.

我发现数组类和转换类有一些帮助器函数可能会有所帮助,但我在理解如何适当地使用它们来解决这个问题时遇到了麻烦.

谢谢

推荐答案

如果你只有3种类型,为什么不判断所有这些可能性呢?

using System.Linq;

...

object primitiveTypeArray = pi.GetValue(myObject)

double[] convertedArray = 
    primitiveTypeArray is double[] da ? da
  : primitiveTypeArray is float[] fa ? fa.Select(item => (double) item).ToArray()
  : primitiveTypeArray is ulong[] ua ? ua.Select(item => (double) item).ToArray()
  : null; // or throw exception here

请注意,我们不能将float[]转换为double[],但可以创建所需的double[].

Csharp相关问答推荐

ASP.NET Core -是否可以对所有最小API端点应用过滤器?

碰撞检测与盒碰撞器,其isTrigger on问题

具有单一导航属性的EF核心一对多关系

将轮询与超时同步

C#XmlSerializer-输出控制新行的多个XML片段

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

从依赖项容器在.NET 8中的Program.cs文件中添加IOC

为什么Regex.IsMatch(";\\t";,";\\t";)返回FALSE而不是TRUE?

用C#从Word文档中删除重复的节控件和文本内容控件

共享暂存/生产环境中Azure事件中心的建议配置

泛型参数在.NET 8 AOT中没有匹配的批注

正在从最小API-InvocationConext.Arguments中检索参数的FromBodyAttribute

如何在发布NuGet包之前设置命名空间?

用MongoDB c#驱动程序删除和返回嵌套数组中的文档

从GRPC连接创建ZipArchive

FakeItEasy自动嘲弄内容

在C#/ASP.NET Core 7中,什么可能导致POST请求作为GET请求发送

NETSDK1201:对于面向.NET 8.0和更高版本的项目,默认情况下,指定RUNTIME标识符将不再生成自包含的应用程序

SharpZipLib在文件名前加上目录名,生成tar.gz

根据运行时值获取泛型类型的字典