导致再次溶解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
社区是否可以帮助我调试或理解此问题并解决它?
您必须重新考虑这一点——您不能对类型参数调用静态方法。首先,编译器无法在编译时解决它们。有关更多详细信息,请参阅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的危险。