首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c#中使用索引器从结构中获取值

在c#中使用索引器从结构中获取值
EN

Stack Overflow用户
提问于 2017-03-29 14:45:12
回答 2查看 586关注 0票数 0

我将结构定义如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
public struct PacketPenetration
{    
    private Dictionary<double, double[,]> penetration;
    public PacketPenetration(Dictionary<double, double[,]> penetration)
    {        
        this.penetration = penetration;
    }

    public Dictionary<double, double[,]> Penetration { get { return penetration; } }

    public double this[double index1, int index2, int index3]
    {
        get
        {
            return this.penetration[index1][index2,index3];
        }
    }
}

实例化如下:

代码语言:javascript
复制
var penetration = new PacketPenetration();

我的目标是能够将项添加到penetration中,并能够使用结构中定义的索引器从它获得值。然而,下面的代码行不起作用:

代码语言:javascript
复制
penetration.Add(3.5, testArray);

testArray是double[,],问题在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-29 14:52:51

因为您的PacketPenetration没有Add方法,所以它无法工作。

您的索引器配置为get-only,而且,拥有索引器并不会使类奇迹般地实现方法Add

Add方法添加到PacketPenetration中如何:

代码语言:javascript
复制
    public void Add(double index , double[,] array)
    {
        penetration.Add(index, array);
    }

如果确实需要通过索引器,可以添加以下内容:

代码语言:javascript
复制
    public double[,] this[double index1, double [,] array]
    {
        set
        {
            this.penetration[index1] = value;
        }
    }

然后:

代码语言:javascript
复制
  penetration[3.5] =  testArray;
票数 1
EN

Stack Overflow用户

发布于 2017-03-29 15:01:13

你首先有两件事要做:

  1. var penetration = new PacketPenetration(); ==> var penetration = new PacketPenetration(initializedDictionary);调用无参数构造函数将不会初始化渗透字典。因此NullReferenceException
  2. penetration.Add(3.5, testArray); ==> penetration.Penetration.Add(3.5, testArray);或为结构定义Add方法
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43096838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档