导致再次溶解C#“;Espression表示一个';类型参数';,其中a';变量'';值&

本文关键字:一个 类型参数 变量 其中 表示 Espression | 更新日期: 2023-09-27 18:21:17

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

社区是否可以帮助我调试或理解此问题并解决它?

导致再次溶解C#“;Espression表示一个';类型参数';,其中a';变量'';值&

您必须重新考虑这一点——您不能对类型参数调用静态方法。首先,编译器无法在编译时解决它们。有关更多详细信息,请参阅Eric Lippert的博客文章。

你可能想把它改成类似的东西:

static T[] RA<T>(Func<string, T> projection)
{
    return RL().Split().Select(projection).ToArray();
}

编译器在编译时不知道结果类型,无法链接Parse调用。

您应该使用Convert类来避免编译问题并限制泛型类型属性

static T[] RA<T>()
    where T : IConvertible
{
    return RL().Split().Select(v => (T)Convert.ChangeType(v, typeof(T))).ToArray();
} 

您可以尝试用System.Convert.ChangeType(v, typeof(T))替换T.Parse (v),但这可能会带来InvalidCastException的危险。

相关文章: