我有一個奇怪的行爲,使用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