如何将Object数组转换为Custom Class数组

本文关键字:数组 Custom Class 转换 Object | 更新日期: 2023-09-27 18:08:19

我有

public class ABSInfo 
    {
        public decimal CodeCoveragePercentage { get; set; }
        public TestInfo TestInformation { get; set; }      
    }

我有一个对象数组,上面写着"SourceType">

public object[] SourceType { get; set; }

我想将对象数组(SoiurceType(转换为ABSInfo[]。

我正在尝试作为

ABSInfo[] absInfo = Array.ConvertAll(SourceType, x => (ABSInfo)x);

但是错误

无法将"WindowsFormsApplication1.TestInfo"类型的对象强制转换为"WindowsFormsApplication1.ABSInfo"类型。

如何进行转换?

编辑:

public class TestInfo
    {
        public int RunID { get; set; }
        public TestRunStatus Status { get; set; }
        public string Description { get; set; }
        public int TotalTestCases { get; set; }
        public int TotalTestCasesPassed { get; set; }
        public int TotalTestCasesFailed { get; set; }
        public int TotalTestCasesInconclusive { get; set; }
        public string ReportTo { get; set; }
        public string Modules { get; set; }
        public string CodeStream { get; set; }
        public int RetryCount { get; set; }
        public bool IsCodeCoverageRequired { get; set; }
        public FrameWorkVersion FrameworkVersion { get; set; }
        public string TimeTaken { get; set; }
        public int ProcessID { get; set; }
        public int GroupID { get; set; }
        public string GroupName { get; set; }
    }

如何将Object数组转换为Custom Class数组

您可以使用LINQ;

ABSInfo[] absInfo = SourceType.Cast<ABSInfo>().ToArray();

ABSInfo[] absInfo = SourceType.OfType<ABSInfo>().ToArray();

第一个将尝试将每个源数组元素强制转换为ABSInfo,并在至少一个元素不可能时返回InvalidCastException

第二个将只将这些元素放入返回数组中,这些元素可以强制转换为ABSInfo对象。

通过使ABSInfo类从TestInfo:继承来更正它

public class ABSInfo : TestInfo
{
    public decimal CodeCoveragePercentage { get; set; }
}

这将解决转换问题,并允许您直接在ABSInfo类实例上访问TestInfo属性。

您有一个对象数组。不能将所有object强制转换为ABSInfo,除非所有对象都是ABSInfo(或更多派生类(的实例。

所以要么在你的数组中放入null

ABSInfo[] absInfo = Array.ConvertAll(SourceType, x => x as ABSInfo);

或者不向CCD_ 10添加除CCD_。

您的数组似乎包含TestInfo类型的对象
因此,您需要为数组中的每个TestInfo构建一个对象ABSInfo。

在LINQ:中

var absInfo = SourceType.Select(s => new ABSInfo()
                            { 
                              TestInformation = (TestInfo)s
                            , CodeCoveragePercentage = whatever
                            }).ToArray()