簡體   English   中英

使用嵌套在泛型類中的類作為C#中的類型參數

[英]Using a class nested in a generic class as type parameter in C#

具有以下定義:

public class Generic<T>
{
    public class Nested { }
}

鑒於ECMAref§25.1規定:

嵌套在泛型類聲明或泛型結構聲明(第25.2節)中的任何類本身都是泛型類聲明,因為應提供包含類型的類型參數以創建構造類型。

我知道Nested需要type參數才能實例化。

我可以通過typeof獲得泛型Type

var type = typeof(Generic<>.Nested); 
// type.FullName: Namespace.Generic`1+Nested

有什么方法可以將它用作泛型方法的類型參數,如下所示?

var tmp = Enumerable.Empty<Generic<>.Nested>(); 
// Error: Unexpected use of an unbound generic

如前所述,根據ECMA規范,我了解在實例化之前必須滿足所有類型參數,但此處不創建任何對象。 此外, Nested類沒有以任何方式使用類型參數:我只是想為了代碼組織目的而嵌套它。

不,你做不到。 如你所說

在實例化之前必須滿足所有類型參數

雖然沒有Generic<>.Nested實例Generic<>.Nested實際上生成了Generic<>.Nested

  • 編譯器不知道Empty的語義(所以不知道沒有創建Generic<>.Nested實例)
  • 主要問題 :你確實想要創建一個IEnumerabe<Generic<>.Nested>的實例,它也是一個帶有“不滿意的類型參數”的類型

我認為你的主要目標可能只是通過將子類放在同一名稱空間中的父類旁邊來實現。

命名空間實際上應該按照您在帖子中的評論中所討論的方式組織代碼。

你應該只將一個類定義為一個子類,只有父類將使用它。

暫無
暫無

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

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