Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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#_Arrays_Generics - Fatal编程技术网

C# 泛型、类型和数组

C# 泛型、类型和数组,c#,arrays,generics,C#,Arrays,Generics,“泛型类型”可以是数组吗 在这种情况下,如何访问该阵列 当给定的泛型类型T是一个数组时,是否可以将其作为数组访问;当它不是一个数组时,是否可以将其作为非数组访问 例如: 如果我有一个像-> void MustBeOfType<T>(T value){} void MustBeOfType(T值){ 我可以有-> MustBeOfType<int>(10); MustBeOfType(10); 而且-> MustBeOfType<int[]>( new

“泛型类型”可以是数组吗

在这种情况下,如何访问该阵列

当给定的泛型类型T是一个数组时,是否可以将其作为数组访问;当它不是一个数组时,是否可以将其作为非数组访问

例如:

如果我有一个像->

void MustBeOfType<T>(T value){}
void MustBeOfType(T值){
我可以有->

MustBeOfType<int>(10); 
MustBeOfType(10);
而且->

MustBeOfType<int[]>( new int[] { 1, 2, 3 } );
MustBeOfType(新的int[]{1,2,3});
在这些通用方法中,它们能否像人们所期望的那样访问这些值一个是整数,一个是整数[]

我想可能有(T)类型的东西。IsArray()。。。但我一辈子都搞不懂当参数是数组时如何将其转换为数组


谢谢

你可以……但是,我不确定你是否应该:

void MustBeOfType<T>(T value)
{
  Array array = value as Array;
  if (array != null) //It is an array
  {
    foreach (var arrayItem in array)
    {
    }

    for (int i = 0; i < array.Length; i++)
    {
      var arrayItem = array.GetValue(i);
    }
  }
  else //It is not an array
  {
  }
}
void MustBeOfType(T值)
{
数组=作为数组的值;
if(array!=null)//它是一个数组
{
foreach(数组中的变量arrayItem)
{
}
for(int i=0;i
我不确定您想做什么,但泛型类型可以是任何类型。您可以使用
where
子句对泛型类型进行限制,但这取决于您以及功能和上下文

让我们以列表为例。假设我们在列表中有一个列表。然后我们将其定义为:

List<List<string>> myListOfList = new List<List<string>>();
List myListOfList=new List();
您的“必须是”类型也可以是任何类型(如果您没有在where子句中设置限制)

MustBeOfType()
MustBeOfType()
MustBeOfType()
并且能够访问它:

class MustBeOfType<T>
{
    private T _value;
    MustBeofType(T value)
    {
         _value = value;
    }

}
类的类型必须为
{
私人T_值;
MustBeofType(T值)
{
_价值=价值;
}
}

为了能够对进行操作,您可以使用反射,或者如果您将where限制和where限制设置为Type,然后,您可以看到该类型的属性。

您如何才能“访问”函数中的值?听起来您需要一系列重载。@Lee可能会做一些令人厌恶的事情,例如如果(值为int)有一系列
if(value是List)
等等——这是可行的——但这违背了首先使用泛型的全部意义。在@WaiHaLee的注释上展开,have
MustBeOfType(T value)
MustBeOfType(T[]value)
将根据传入的类型调用相应的一个。
class MustBeOfType<T>
{
    private T _value;
    MustBeofType(T value)
    {
         _value = value;
    }

}