为了账号安全,请及时绑定邮箱和手机立即绑定

泛型、类型和数组

泛型、类型和数组

C#
呼啦一阵风 2022-06-12 15:23:17
“通用类型”可以是数组吗?在它存在的情况下,如何访问该数组?您可以将给定的泛型类型 T 作为数组访问,当它是一个时,当它不是一个时,作为非数组访问?例如:如果我有这样的方法 ->void MustBeOfType<T>(T value){}我可以->MustBeOfType<int>(10);还有->MustBeOfType<int[]>( new int[] { 1, 2, 3 } );在这些通用方法中,它们能否按预期访问值?- 一个作为 int 和一个作为 int[]?我认为 typeof(T).IsArray() 可能有一些东西......但我一生都无法弄清楚如何将参数转换为一个数组。谢谢!
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

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


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

  {

  }

}


查看完整回答
反对 回复 2022-06-12
?
偶然的你

TA贡献1841条经验 获得超3个赞

我不确定您要做什么,但通用类型可以是任何东西。您可以使用where子句对泛型类型进行限制,但这取决于您以及功能和上下文。


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


List<List<string>> myListOfList = new List<List<string>>();

你必须是类型也可以是任何东西(如果你没有对 where 子句施加限制)


MustBeOfType<int[][]>()

MustBeOfType<List<List<string>>>()

MustBeOfType<AnyOtherGenericClass<List<string>>>()

并能够访问它:


class MustBeOfType<T>

{

    private T _value;

    MustBeofType(T value)

    {

         _value = value;

    }


}

为了能够对 进行操作,您可以使用反射,或者如果您放置了 where 限制并且您的 where 限制具有 Type,那么您可以看到该 Type 的属性。


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号