我剛發現在LINQ的怪異的行爲:LINQ的。選擇()/ .SelectMany()自動使用第二,可選參數
當調用一元函數我喜歡只通過函數名,所以不是
var foo = myList.Select(item => MyFunc(item));
我寫
var foo = myList.Select(MyFunc);
這應該是相同的。只有在某些情況下,它不是!即如果該函數具有第二參數,其是一個int
和可選的:
private string MyFunc(string input, int foo = 0)
{
...
}
在這種情況下,聲明
var foo = myList.Select(MyFunc);
等於
var foo = myList.Select((item, index) => MyFunc(item, index));
如果第二參數是不opional或不是int
,編譯器抱怨,但在這種情況下,它只是偷偷摸摸地讓你感到驚訝。
有沒有其他人遇到過這個?哪種其他Linq表達式以這種方式工作? (到目前爲止,.SelectMany()
呢)。什麼是最好的方法來解決此行爲(並防止其他陷入同一陷阱?)