簡體   English   中英

如何通過C#中的反射提取泛型方法約束?

[英]How to extract generic method constraints via reflection in C#?

給定System.Reflection.MethodInfo類型的對象如何提取泛型參數約束? 不知怎的,我找不到有關此的合理信息。

您需要做的就是獲取泛型方法定義,並在其上列出泛型參數:

method
.GetGenericMethodDefinition()
.GetGenericArguments()
.Select(i => i.GetGenericParameterConstraints())
.Dump();

但請注意,這並不是100%對應於C#的通用類型約束 - 有一點擺動空間。 不過,如果你只關心例如基類型約束,它會工作正常:)

作為一個例子, class實際上並不是一個類型約束,有趣的是, struct被“翻譯”為System.ValueType (並不太令人驚訝)。 new()也不是類型約束,因此此方法無法找到它。

如果您還需要考慮這些約束,請使用SelectGenericParameterAttributes屬性。 例如, struct約束將為您提供NotNullableValueTypeConstraint | DefaultConstructorConstraint NotNullableValueTypeConstraint | DefaultConstructorConstraint

您可能正在尋找Type.GetGenericParameterConstraints Method()

返回Type對象的數組,表示當前泛型類型參數的約束。

還有Type.GetGenericArguments方法()

返回Type對象的數組,表示閉合泛型類型的類型參數或泛型類型定義的類型參數

暫無
暫無

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

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