我有
public class ABSInfo
{
public decimal CodeCoveragePercentage { get; set; }
public TestInfo TestInformation { get; set; }
}
我有一个Object数组说“SourceType”
public object[] SourceType { get; set; }
我想将Object Array(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; }
}
答案 0 :(得分:6)
您可以使用LINQ;
ABSInfo[] absInfo = SourceType.Cast<ABSInfo>().ToArray();
或者
ABSInfo[] absInfo = SourceType.OfType<ABSInfo>().ToArray();
第一个将尝试将每个源数组元素转换为ABSInfo
,并且当至少一个元素不可能时,将返回InvalidCastException
。
第二个将仅返回数组中的这些元素,这些元素可以转换为ABSInfo
个对象。
答案 1 :(得分:0)
你有一个对象数组。除非所有对象都是object
(或更多派生类)的实例,否则无法将所有ABSInfo
强制转换为ABSInfo
。
所以要么在数组中加上
ABSInfo[] absInfo = Array.ConvertAll(SourceType, x => x as ABSInfo);
或者不要向ABSInfo
添加除SourceType
之外的其他内容。
答案 2 :(得分:0)
通过从ABSInfo
继承{<1}}
TestInfo
课程
public class ABSInfo : TestInfo
{
public decimal CodeCoveragePercentage { get; set; }
}
这将解决转换问题,并允许您直接在ABSInfo类实例上访问TestInfo属性。
答案 3 :(得分:0)
您的数组似乎包含TestInfo类型的对象 因此,您需要为数组中的每个TestInfo构建一个对象ABSInfo。
在LINQ中:
var absInfo = SourceType.Select(s => new ABSInfo()
{
TestInformation = (TestInfo)s
, CodeCoveragePercentage = whatever
}).ToArray()