Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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# - Fatal编程技术网

如何在C#中获取元组的组件?

如何在C#中获取元组的组件?,c#,C#,如果我声明了一个元组,我想得到以下结果 一个对象,我会想象这是一个类型对象,我可以对它执行比较,效果是obj==typeof(Tuple),它将返回true 类型对象的数组,相当于new[]{typeof(int),typeof(double)}。这一点我可以通过反射来理解,因为tuple对象将其项公开为属性,但我不知道这些属性的顺序,MSDN文章说我不能依赖观察 我需要这个来为泛型方法做一个特例,如果它传递了一个元组,它应该做一些特殊的事情。像这样: void foo<T>(...

如果我声明了一个
元组
,我想得到以下结果

  • 一个对象,我会想象这是一个类型对象,我可以对它执行比较,效果是
    obj==typeof(Tuple)
    ,它将返回
    true

  • 类型对象的数组,相当于
    new[]{typeof(int),typeof(double)}
    。这一点我可以通过反射来理解,因为tuple对象将其项公开为属性,但我不知道这些属性的顺序,MSDN文章说我不能依赖观察

  • 我需要这个来为泛型方法做一个特例,如果它传递了一个元组,它应该做一些特殊的事情。像这样:

    void foo<T>(...){
        if(T == Tuple<Q, S, ...>){
         //special code that needs to know what Q and S and ... are.
        }
    }
    
    void foo(…){
    if(T==元组){
    //需要知道Q、S和…是什么的特殊代码。
    }
    }
    
    提前谢谢

    if (typeof(T).IsGenericType && typeof(T).GetGenericTypeDefinition() == typeof(Tuple<,,>)) 
    {
    }
    

    返回传递给元组的类型参数数组。

    非常感谢。遗憾的是,我不得不提前知道争论的数量。我想这是没有办法的?嗯,元组排列的数量是有限的,所以你可以计划一下。例如,您可以将所有16种类型存储在一个数组中,并获取与类型参数数==GetGenericArguments().Length相对应的类型。
    typeof(T).GetGenericArguments()