【问题标题】:How to specify Generic types on delegates?如何在委托上指定通用类型?
【发布时间】:2010-11-15 10:00:34
【问题描述】:

也许我只是没有正确阅读 MSDN 文档,但是给定一个接受一个字符串参数并返回类型 T 的函数,如何使用 Func() 将其指定为共享函数?

MSDN 说Func(Of In T1, Out TResult),但他们所有的示例都使用相同的数据类型,即Func(Of String, String)。我想做Func(Of In String, Out T),其中 T 是任意的(但如果需要,我可以通过基类来限制它)。我希望它在类级别共享/静态,但封装类本身不是泛型类。似乎在这种特定情况下,不可能做我想做的事,因为编译器在运行时无法知道 Type T 是什么。

那么是否可以在 VB.net(不是 C#)中对委托或匿名 lambda 表达式进行泛型?

【问题讨论】:

    标签: vb.net generics


    【解决方案1】:

    目前尚不清楚您要做什么。您当然可以在泛型方法或类型中使用泛型委托类型。举个简单的例子:

    public T Convert<T>(Func<string, T> converter, string text)
    {
        return converter(text);
    }
    

    但是,如果T 本身不是一个类型参数(在泛型方法或类型中指定),则无法执行此操作。

    【讨论】:

    • 有 VB.net 格式的吗?尽管在 C 方面受过一些教育,但我发现由于某些奇怪的原因很难阅读 C#。
    • 是的,我应该补充一点,封装在一个方法中,我可能可以做我想做的事。根据这个问题,我正在考虑更多类似创建代表字典的东西:stackoverflow.com/questions/2550218/…
    • 主要是因为当我需要在运行时确定对象的类型时,我试图找到一种更好的方法来避免使用大型 Select Case ... 语句。我遇到了使用多态性而不是大型条件块的参考资料。困难的部分是找到一个像样的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多