3

我有

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; }
    }
4

4 回答 4

6

你可以使用 LINQ;

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

或者

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

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

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

于 2013-04-09T12:38:47.550 回答
0

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

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

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

或者不要添加除ABSInfoto之外的其他内容SourceType

于 2013-04-09T12:41:14.753 回答
0

ABSInfo通过使其继承来更正您的类TestInfo

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

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

于 2013-04-09T12:42:18.263 回答
0

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

在 LINQ 中:

var absInfo = SourceType.Select(s => new ABSInfo()
                            { 
                              TestInformation = (TestInfo)s
                            , CodeCoveragePercentage = whatever
                            }).ToArray()
于 2013-04-09T12:42:43.123 回答