首页 > 系统相关 >windows C#-索引器

windows C#-索引器

时间:2025-01-03 17:59:55浏览次数:3  
标签:arr set get windows C# 索引 new stringCollection

索引器允许类或结构的实例就像数组一样进行索引。 无需显式指定类型或实例成员,即可设置或检索索引值。 索引器类似于属性,不同之处在于它们的访问器需要使用参数。

以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单 get 和 set 访问器方法。 Program 类创建了此类的一个实例,用于存储字符串。

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value; }
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

表达式主体定义

索引器的 get 或 set 访问器包含一个用于返回或设置值的语句很常见。 为了支持这种情况,表达式主体成员提供了一种经过简化的语法。 自 C# 6 起,可以表达式主体成员的形式实现只读索引器,如以下示例所示。

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];
   int nextIndex = 0;

   // Define the indexer to allow client code to use [] notation.
   public T this[int i] => arr[i];

   public void Add(T value)
   {
      if (nextIndex >= arr.Length)
         throw new IndexOutOfRangeException($"The collection can hold only {arr.Length} elements.");
      arr[nextIndex++] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection.Add("Hello, World");
      System.Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

请注意,=> 引入了表达式主体,并未使用 get 关键字。

自 C# 7.0 起,get 和 set 访问器均可作为表达式主体成员实现。 在这种情况下,必须使用 get 和 set 关键字。 例如:

using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get => arr[i];
      set => arr[i] = value;
   }
}

class Program
{
   static void Main()
   {
      var stringCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World.";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

索引器概述

  • 使用索引器可以用类似于数组的方式为对象建立索引;
  • get 取值函数返回值。 set 取值函数分配值;
  • this 关键字用于定义索引器;
  • value 关键字用于定义由 set 访问器分配的值;
  • 索引器不必根据整数值进行索引;由你决定如何定义特定的查找机制;
  • 索引器可被重载;
  • 索引器可以有多个形参,例如当访问二维数组时;

 

标签:arr,set,get,windows,C#,索引,new,stringCollection
From: https://blog.csdn.net/m0_72813396/article/details/144797442

相关文章

  • windows C#-确定字符串是否表示数值
    若要确定字符串是否是指定数值类型的有效表示形式,请使用由所有基元数值类型以及如DateTime和IPAddress等类型实现的静态TryParse方法。以下示例演示如何确定“108”是否为有效的int。inti=0;strings="108";boolresult=int.TryParse(s,outi);//inow=......
  • 基于N-HiTS神经层次插值模型的时间序列预测——cross validation交叉验证与ray tune超
    论文链接:https://arxiv.org/pdf/2201.12886v3N-......
  • LangChain总结阶段一
    了解Prompttemplate,和大模型交互就靠它了提示板(PromptTemplate)是与大型语言模型(LLMs)交互时用来生成结构化提示的工具。它使用Python的str.format方法来构建带有占位符的模板字符串,允许开发者插入特定主题或其他变量以生成定制化的提示。这种方式简化了与LLMs的对话,使得生......
  • Linux(Centos 7.6)命令详解:ls
    1.命令作用列出目录内容(listdirectorycontents)2.命令语法Usage:ls[OPTION]...[FILE]...3.参数详解OPTION:-l,longlist使用长列表格式-a,all不忽略.开头的条目(打印所有条目,包括.开头的隐藏条目)-t,modificationtime按修改时间排序,最新的优先-r,reverseorderwhile......
  • nacos 报错排查
    报错内容 org.springframework.beans.factory.UnsatisfiedDependencyException:Errorcreatingbeanwithname'memoryMonitor'definedinURL[jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-2.2.3.jar!/com/alibaba/nacos/config/se......
  • toad.selection.select函数
    toad.selection.select函数概述toad.selection.select是toad库中用于自动特征选择的一个重要函数。它根据指定的阈值条件,筛选出符合要求的特征,同时可以根据特征间的相关性进一步剔除冗余特征。这个函数特别适用于信用评分卡建模和其他金融风控场景,帮助快速清洗和优化特......
  • 数据集—OpenScene
    OccupancyNetwork3D框检测与固定输出尺寸联系起来-目标中心体素-网格中心体素(Voxel)-三维像素二维的叫像素体积像素,‌即空间中的小块体积元素2018年在论文「OccupancyNetworks:Learning3DReconstructioninFunctionSpace」 把世界划分为一系列网格单......
  • Vue3 启动报错:failed to load config from D:\file\vue\examination_front\vite.c
    今天在创建vue3项目的时候报错了一个启动开发服务器时遇到了一个构建错误 查询了一下,执行npm i的时候,他并没有帮我安装vitePSD:\file\vue\hello_vue3>npmlistvitehello_vue3@0.0.0D:\file\vue\hello_vue3└──(empty)最后执行安装,就能启动了PSD:\file\vue\h......
  • 通过本地私有的镜像仓库harbor解决网络原因导致的jdk无法加载而造成的docker打包错误.
    ​各种网络原因,或是docker.io无法访问,或是阿里的镜像源故障,导致java打包发布的时候报错,很影响代码发布的质量。解决思路:墙出去把jdk下载下来,代码使用本地的harbor库进行引用,一劳永逸。此解决方法也适用于国外优质不频繁变动的镜像源的本地化使用。解决方法1.墙出去,把需要......
  • Django Swagger文档库drf-spectacular
    一、概述drf-spectacular是一个为DjangoRESTFramework(DRF)设计的OpenAPI3.0和3.1规范的生成器。它旨在提供既理智又灵活的方式来创建API文档,主要实现以下三个目标:从DRF中提取尽可能多的schema信息提供灵活性,使schema在现实世界中可用(不仅仅是示例)生成一个与......