如何将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; }
}
您可以使用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()