设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3441|回复: 6
打印 上一主题 下一主题

【原创】关于:一维零基数组,多个创建方式(茴字有几个写法)

[复制链接]
跳转到指定楼层
1#
发表于 2014-2-23 10:32:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
回归本质,聊一聊数组,只讨论最基础的

关于:一维零基数组

定义:
[1]零基,zero-based, 最小索引为0
[2]一维,相对于(多维,交错)
[3]效率,编译器又开后门了
[A]提供了IL操作指令newarr
[B]访问数组时不需要通过索引减去偏移量来完成,
[C]而且JIT也只需执行一次范围检查
实例化时必须指定数组的大小,
实例后不能改变数据的大小

[4]缺点
实例化时必须指定数组的大小
实例化后也不能改变数组结构
(不能添加,插入,删除结点,但可以改变结点的内容)

集合的基础之一,集合的三种基础结构:
[1]基于数组
[2]基于链表
[3]基于位


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2014-2-23 10:32:41 | 只看该作者
本帖最后由 faunus 于 2014-2-23 10:38 编辑

创建方式:(茴字有几个写法)
[1]显式创建

  1. //显式创建
  2. Array myArray = Array.CreateInstance(typeof(string), 3);
  3. myArray.SetValue("a", 0);
  4. myArray.SetValue("b", 1);
  5. myArray.SetValue("c", 2);
  6. //无法直接赋值,导至出错
  7. //myArray[0] = 99;//无法将带[]的索引应用于“System.Array”类型的表达式
  8. //必须经过显式的转换
  9. int[] myArrayConvert = (int[])myArray;
  10. myArrayConvert[0] = 99;
复制代码






3#
 楼主| 发表于 2014-2-23 10:33:05 | 只看该作者
本帖最后由 faunus 于 2014-2-23 10:38 编辑

[2]常规创建

  1. int[] myArray = new int[3];
  2. myArray[0] = 0;
  3. myArray[1] = 1;
  4. myArray[2] = 2;
复制代码








4#
 楼主| 发表于 2014-2-23 10:33:28 | 只看该作者
本帖最后由 faunus 于 2014-2-23 10:38 编辑

[3]隐式创建

  1. //正确书写方法
  2. int[] myArray0 = { 0, 1, 2 };
  3. int[] myArray1 = { 0, 1, 2, };
  4. int[] myArray2 = new []{ 0, 1, 2 };
  5. int[] myArray3 = new int[] { 0, 1, 2 };
  6. int[] myArray4 = new int[3] { 0, 1, 2 };
  7. //错误书写方法
  8. //int[] myArrayErr = { 0, 1, "a" };//无法将类型“string”隐式转换为“int”
  9. //int[] myArrayErr = new[] { 0, 1, "a" };//找不到隐式类型数组的最佳类型
  10. //int[] myArrayErr = new[3] { 0, 1, 2 };//语法错误,应输入“]”
  11. //int[] myArrayErr = new int[4] { 0, 1, 2 };//无效的秩说明符: 应为“,”或“]”
复制代码




5#
 楼主| 发表于 2014-2-23 10:33:47 | 只看该作者
本帖最后由 faunus 于 2014-2-23 10:39 编辑

[4]匿名创建

  1. //正确书写方法
  2. var myArray1 = new[] { 0, 1, 2 };
  3. var myArray2 = new int[] { 0, 1, 2 };
  4. var myArray3 = new int[3] { 0, 1, 2 };
  5. //错误书写方法
  6. //var myArrayErr = { 0, 1, 2 };//无法用数组初始值设定项初始化隐式类型的局部变量
复制代码





6#
 楼主| 发表于 2014-2-23 10:34:07 | 只看该作者
本帖最后由 faunus 于 2014-2-23 10:40 编辑

[5]其它


  1. int i = 1;
  2. char c = 'a';
  3. string s = "s";
  4. //正确书写方法
  5. int[] myArray0 = { 0, i, 2 };
  6. int[] myArray1 = { 0, c, 2 };//隐式转换
  7. //错误书写方法
  8. //int[] myArrayErr = { 0, s, 2 };//无法将类型“string”隐式转换为“int”
复制代码



7#
 楼主| 发表于 2014-2-23 10:40:47 | 只看该作者
说明:
在隐式的匿名的创建方式中,
数据的赋值实际上是调用了IList接口上的.Add()方法,
了解数组类,最好的的办法是:自己实现一个数组类试试^_^


  1. //提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。
  2. [Serializable]
  3. [ComVisible(true)]
  4. public abstract class Array : ICloneable, IList, ICollection, IEnumerable { }
复制代码



您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 12:46 , Processed in 0.098701 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表