iT邦幫忙

0

LAMBDA 問題請教

  • 分享至 

  • xImage

您好:
參考:
https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/lambda-expressions?source=post_page-----438e6de01305--------------------------------#code-try-4

VS 用.netcore 6 ,console來測試

1.請問 右邊的測試框
他只能特定程式嗎?

Func<int, int, int> constant = (_, _) => 42;
Console.WriteLine(constant(1 ,2 ));

A.在VS 中可以跑
B.但在網頁中的 卻出現
(1,36): error CS0100: The parameter name '_' is a duplicate

2.可以有參數預設值嗎?

var IncrementBy = (int source, int increment = 1) => source + increment;

Console.WriteLine(IncrementBy(5)); // 6
Console.WriteLine(IncrementBy(5, 2)); // 7

A.在VS中,嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態
錯誤 CS1065 預設值在此內容中無效。

不能有預設值

B.在網頁中
一堆錯誤訊息
(1,20): error CS8185: A declaration is not allowed in this context.

3.parms

var sum = (params int[] values) =>
{
    int sum = 0;
    foreach (var value in values)
        sum += value;

    return sum;
};

var empty = sum();
Console.WriteLine(empty); // 0

var sequence = new[] { 1, 2, 3, 4, 5 };
var total = sum(sequence);
Console.WriteLine(total); // 15

A.在VS中執行
嚴重性 程式碼 說明 專案 檔案 行 隱藏項目狀態==>params

B.在WEB右邊也是一堆錯誤

謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
linbao
iT邦新手 5 級 ‧ 2024-01-21 12:03:34

1.不是 他可以跑很多程式

2.在舊版,你的錯誤是在相同的作用域變數名稱不能一樣
把它改成

Func<int, int, int> constant = (_, x) => 42;
Console.WriteLine(constant(1 ,2 ));

就可以
如果你是新版的話 C# 12之後的版本就可以,網頁上的應該還沒支持到

3.C# 12 之前的版本中,lambda 表達式不支持直接使用帶有預設值的參數。但從 C# 12 之後就可以,這部分可能你要檢查你的版本。
https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/lambda-expressions#input-parameters-of-a-lambda-expression
https://ithelp.ithome.com.tw/upload/images/20240121/20165063cPZ7WduvfN.png
4. 也是版本問題

總結:你使用的幾乎都是新版本的語法 要升級到 C#12 應該大多數都可以處理。

我要發表回答

立即登入回答