C# 泛型、类型和数组
“泛型类型”可以是数组吗 在这种情况下,如何访问该阵列 当给定的泛型类型T是一个数组时,是否可以将其作为数组访问;当它不是一个数组时,是否可以将其作为非数组访问 例如: 如果我有一个像->C# 泛型、类型和数组,c#,arrays,generics,C#,Arrays,Generics,“泛型类型”可以是数组吗 在这种情况下,如何访问该阵列 当给定的泛型类型T是一个数组时,是否可以将其作为数组访问;当它不是一个数组时,是否可以将其作为非数组访问 例如: 如果我有一个像-> void MustBeOfType<T>(T value){} void MustBeOfType(T值){ 我可以有-> MustBeOfType<int>(10); MustBeOfType(10); 而且-> MustBeOfType<int[]>( new
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的注释上展开,haveMustBeOfType(T value)
和MustBeOfType(T[]value)
将根据传入的类型调用相应的一个。
class MustBeOfType<T>
{
private T _value;
MustBeofType(T value)
{
_value = value;
}
}