如何在system.array中保留null - C#?

now*_*ed. 1 .net c# excel system.array

我使用以下代码获得了excel表的第一行.

Excel.Range firstRow = ws.UsedRange.Rows[1];
var row = (System.Array) firstRow.Cells.Value;
List<object> Array = row.OfType<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

row 由空值组成.

例如. 在此输入图像描述

问题是当它转换为列表时,所有空值都将丢失. (在此声明之后)

 List<object> Array = row.OfType<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

例如. 在此输入图像描述

任何想法如何防止这种情况发生?

Chr*_*ris 5

从你正在做的事情看起来Cast比这更合适OfType.

List<object> Array = myvalues.Cast<object>().ToList();
Run Code Online (Sandbox Code Playgroud)

这应该做你想要的,基本上只是告诉它所有对象都应该转换为类型对象.这将保留null.

区别的原因是在返回强制转换对象之前OfType进行检查current is TResult,当然null is object会返回false,因此会被丢弃.这种情况的必然结果是,Cast如果误用,可以抛出异常(例如Cast<int>,在上面的样本中会抛出异常,InvalidCastExceptionOfType<int>只会返回可以强制转换为整数的项目.

来自: CAST和OFTYPE

有一个重要的案例要考虑Cast将成功返回一个值,而OfType将忽略它:null引用(具有可为空的返回类型).在普通代码中,您可以对任何可空类型(无论是引用类型还是可空值类型)转换空引用.但是,如果使用带有空值的"is"C#运算符,它将始终返回false.基本上,Cast和OfType遵循相同的规则.