我有一个奇怪的行为,使用IEnumerable<string>
三元运算符和Select
语句。
我有两个不同的对象列表。一个列表包含Enums
另一个列表包含对象。这些对象确实有String
属性。
如果一个列表是null
或empty
我想获得另一个列表的值。
下面是一些代码:IEnumerable Select三元运算符语句
public class ExportItem
{
public string Type;
...
}
public enum ExportType
{
ExportType1,
ExportType2,
...
}
的List<ExportItem>
总是由一个配置文件填补。如果提供了命令行参数,则会填充List<ExportType>
。所以如果List<ExportType>
被填充,我想使用它们,否则我想使用配置文件中的那些。
所以我的代码IST是这样的:
IEnumerable<string> exportTypes = MyListOfExportTypes != null &&
MyListOfExportTypes.Any() ? MyListOfExportTypes.Select(x => x.ToString()) :
MyListOfExportItems.Select(x => x.Type);
的事情是,exportTypes
是null
,但我不明白这一点...
当我这样做与if-else
一切按预期工作。另外,如果exportTypes
是List<string>
类型,并且在Select
声明后我呼叫ToList()
一切正常。
使用var a = MyListOfExportTypes.Select(x => x.ToString());
和var b = MyListOfExportItems.Select(x => x.Type);
确实按预期工作。
必须是三元运算符和/或IEnumerable
。但是什么?
或我错过了什么?有什么建议么?
编辑:
我现在有截图...
需要注意的是上述foreach
作品仍然代码...
你怎么知道exportTypes为null? – 2014-12-03 15:12:59
通过调试代码。 – 2014-12-03 15:14:42
如果你调用'exportTypes.ToList'你会得到一个NullReferenceException吗? – 2014-12-03 15:17:14