原因和解决方案C#“表达式表示'类型参数',其中'变量','值'或'类型'是预期的”

时间:2012-01-25 11:12:44

标签: c# generics

我有以下代码在我的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

社区可以协助我调试或理解这个问题并解决它吗?

3 个答案:

答案 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意义上可能会有危险。