我有以下代码在我的C#泛型函数中产生编译问题:
static void solve () {
int[] vals = RA<int>();
}
和我的RA功能:
static T[] RA<T> () {
return Console.ReadLine ().Split ().Select (v => T.Parse (v)).ToArray ();
}
给我以下错误:
Espression denotes a 'type parameter',
where a 'variable', 'value' or 'type' was expected
社区可以协助我调试或理解这个问题并解决它吗?
答案 0 :(得分:5)
你必须重新考虑这个 - 你不能在类型参数上调用静态方法。首先,编译器无法在编译时解析它们。有关详细信息,请参阅Eric Lippert's blog post。
您可能希望将其更改为:
static T[] RA<T>(Func<string, T> projection)
{
return RL().Split().Select(projection).ToArray();
}
答案 1 :(得分:3)
编译器在编译时不知道结果类型,也无法链接Parse调用。
您应该使用Convert类来避免编译问题并限制泛型类型属性
static T[] RA<T>()
where T : IConvertible
{
return RL().Split().Select(v => (T)Convert.ChangeType(v, typeof(T))).ToArray();
}
答案 2 :(得分:2)
您可以尝试将T.Parse (v)
替换为System.Convert.ChangeType(v, typeof(T))
,但在可能的InvalidCastExceptions意义上可能会有危险。