Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 原因解析C“Espression表示“类型参数”,其中需要“变量”、“值”或“类型”_C#_Generics - Fatal编程技术网

C# 原因解析C“Espression表示“类型参数”,其中需要“变量”、“值”或“类型”

C# 原因解析C“Espression表示“类型参数”,其中需要“变量”、“值”或“类型”,c#,generics,C#,Generics,我有以下代码在我的C泛型函数中产生编译问题: static void solve () { int[] vals = RA<int>(); } 社区能否帮助我调试或理解这个问题并解决它?您必须重新考虑这个问题-您不能对类型参数调用静态方法。首先,编译器无法在编译时解析它们。有关更多详细信息,请参阅 您可能希望将其更改为以下内容: static T[] RA<T>(Func<string, T> projection) { return RL(

我有以下代码在我的C泛型函数中产生编译问题:

static void solve () {
    int[] vals = RA<int>();
}

社区能否帮助我调试或理解这个问题并解决它?

您必须重新考虑这个问题-您不能对类型参数调用静态方法。首先,编译器无法在编译时解析它们。有关更多详细信息,请参阅

您可能希望将其更改为以下内容:

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

您可以尝试用System.Convert.ChangeTypev、typeofT替换T.Parse v,但这可能意味着可能存在无效的异常。

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

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

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

你能详细说明你想用这个表达式链做什么吗?@linkerro我需要从文件中读出一行数字。某处数字是双精度的,某处整数等等。所以我想为这个创建一个方法。RL表示控制台。ReadLine@YatsukoYin:那你为什么不包括Console.ReadLine呢?为什么要无缘无故地引入一个令人困惑的名称?@YatsukoYin对于Jon的函数,你可以像RAint.Parse或RAdouble那样调用它。Parse@YatsukoYin:那么这些是您真正的方法和类型名称?RA、RL和solve?我强烈建议您考虑一下可能会在您之后出现的人-写下有意义的名字并遵循.NET命名约定。@JonSkeet不是真的,我正在使用这个模板解决acm.timus.ru、codeforces.com等上的问题。因此,别担心=您还需要将ChangeType的结果转换为谢谢!这正是我要找的!
static T[] RA<T>(Func<string, T> projection)
{
    return RL().Split().Select(projection).ToArray();
}
static T[] RA<T>()
    where T : IConvertible
{
    return RL().Split().Select(v => (T)Convert.ChangeType(v, typeof(T))).ToArray();
}