gpt4 book ai didi

c# - typeof 为未构造的嵌套泛型提供异常 'Type expected`

转载 作者:太空狗 更新时间:2023-10-29 21:35:54 27 4
gpt4 key购买 nike

通常使用 typeof 获取未构造的泛型类型非常容易:

Type genericType = typeof( Func<> );

我希望下面的代码也能正常工作,但它给出了一个编译器错误 Type expected .

Type genericNestedType = typeof( Func<Func<>> );

使用 Func<Func<object>> 解决这个问题相对容易反而。但是,在您“使用”类型的地方,您必须记住调用 GetGenericTypeDefinition() .

您想要“填满”所有未分配的泛型类型参数的场景是不可能的。同样,创建一个虚拟类型来指示这些参数会相对容易。 (例如 Func<Func<ToReplace, object, int>>)

typeof有什么原因吗?不适用于嵌套的泛型未构造类型?

最佳答案

我不认为这是一个编译器错误——C# 4 规范的第 7.6.11 节(typeof 运算符)似乎没有给出任何使其有效的语法; Func<Func<>>既不是有效的 type 结构,也不是有效的 unbound-type-name 结构。

至于为什么是这样:我的猜测是它很少被需要(我以前从未想过使用它,也没有听到有人要求它) 因此,语言设计、编译器实现和测试的额外复杂性被认为超过了好处。 “为什么 C# 没有功能 X”问题通常就是这种情况,正如 Eric Lippert 喜欢指出的那样:)

令我惊喜的是,它可以在执行时执行:

Type unbound = typeof(Func<>);
Type partiallyBound = unbound.MakeGenericType(new[] { unbound });
Console.WriteLine(partiallyBound);

我有一半希望它在 .NET 类型系统中无效,尽管我预计这可能会导致其他问题。

关于c# - typeof 为未构造的嵌套泛型提供异常 'Type expected`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com