2010-11-15 89 views
1

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

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

那么有可能在代理或匿名lambda表达式在VB.net(而不是C#)上做泛型?

回答

2

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

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

但是,你不能没有T是一个类型参数本身,无论是在通用的方法或类指定做到这一点。

+0

得到了VB.net表单?尽管在C中有点受过教育,但我发现很难理解C#。 – Kumba 2010-11-15 10:05:11

+0

是的,我应该补充,封装在一个方法中,我可以做我想做的事情。我想创建一个代表字典,在这里这个问题的更多的东西:http://stackoverflow.com/questions/2550218/how-to-store-a-function-pointer-in-c – Kumba 2010-11-15 10:07:32

+0

Mostly因为当我需要确定运行时对象的类型时,我试图找到避免大型“Select Case ...”语句的更好方法。我遇到了使用多态的参考来做到这一点,而不是大的条件块。困难的部分是找到一个这样的体面的例子。 – Kumba 2010-11-15 10:09:00