簡體   English   中英

是否可以在C#中定義通用lambda?

[英]Is it possible to define a generic lambda in C#?

我在一個操作指定類型的方法中有一些邏輯,我想創建一個封裝邏輯的通用lambda。 這就是我想要做的精神:

public void DoSomething()
{
    // ...

    Func<T> GetTypeName = () => T.GetType().Name;

    GetTypeName<string>();
    GetTypeName<DateTime>();
    GetTypeName<int>();

    // ...
}

我知道我可以將類型作為參數傳遞或創建泛型方法。 但我很想知道lambda是否可以定義自己的泛型參數。 (所以我不是在尋找替代方案。)據我所知,C#3.0不支持這一點。

無法創建具有新通用參數的lambda表達式。 您可以在包含的方法或類型上重用通用參數,但不能創建新的參數。

雖然Jared Parson的回答在歷史上是正確的(2010年!),但如果您搜索“通用lambda C#”,這個問題將成為Google的第一個問題。 雖然lambdas沒有接受其他泛型參數的語法,但現在可以使用本地(通用)函數來實現相同的結果。 當他們捕捉上下文時,他們幾乎就是你正在尋找的東西。

public void DoSomething()
{
    // ...

    string GetTypeName<T>() => typeof(T).GetType().Name;

    string nameOfString = GetTypeName<string>();
    string nameOfDT = GetTypeName<DateTime>();
    string nameOfInt = GetTypeName<int>();

    // ...
}

雖然你不能(但是?)有一個通用的lambda(參見這個答案和對這個問題的一個評論),你可以得到相同的用法語法。 如果你定義:

public static class TypeNameGetter
{
    public static string GetTypeName<T>()
    {
        return typeof( T ).Name;
    }
}

你可以使用它(雖然using static是C#6):

using static TypeNameGetter;
public class Test
{
    public void Test1()
    {
        var s1 = GetTypeName<int>();
        var s2 = GetTypeName<string>();
    }
}

只有當您的DoSomething方法是通用的或其類是通用的時,才可以執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM