C#:如何在另一个类中使用可索引属性?

汤米彼得森

我正在从视图中读取数据到列表中的项目。每个项目都是一个字符串和三个双打:

public class StatReportDataItems
{
    public string Label { get; set; }

    public double NumData1 { get; set; }

    public double NumData2 { get; set; }

    public double NumData3 { get; set; }
}

这是包含该列表的类:

public class StatReportDataModel
{
    public string SReportType { get; set; }

    public int numdatas { get; set; }

    public List<StatReportDataItems> StatReportDataList { get; set; }

    public string ReportTitle { get; set; }

}

将数据读取到列表的众多例程之一:

    public List<StatReportDataItems> GetReport888()
    {
        var query = from rv in ProcessDB.Report888Views
                    select new StatReportDataItems
                    {
                        Label = rv.Label,
                        NumData1 = (double)rv.NumData1
                    };
        var retValue = query.ToList();
        return retValue;
    } // GetReport888

一些例程还会将数据填充到 NumData2 和 Numdata3 中,然后有一个使用 chart.js 显示数据的通用例程。

最初只是“显示”,但现在在通用显示例程到达之前,应该对数据做越来越多的事情。由于这包括遍历数据,如果三个 Numdata 是一个包含三个项目的数组/列表/集合(将来可能会更多),它会使代码变得更好。

由于返回数组被视为一个很大的禁忌,我认为我应该使用索引属性。这将是一个开始:

public class Constants
{
    public static int AntalData = 3;
}

public class NumDataType
{
    private double[] numarr = new double[Constants.AntalData];
    public int Length
    {
        get { return numarr.Length; }
    }
    public double this[int index]
    {
        get { return numarr[index]; }
        set { numarr[index] = value; }
    }
}

在我的应用程序中直接使用这个 NumDataType 会很容易:

NumDataType NumItems = new NumDataType();
NumItems[0] = 3.14;

但是,当我尝试在我的类 StatReportDataItems 中使用它然后替换

NumData1 = (double)rv.NumData1

在 GetReport888 中,我无法让它工作,尝试不同的代码编写方式。我经常收到编译器错误“当前上下文中不存在名称‘NumData’”

具有更改的 NumData 的 StatReportDataItems 类:

public class StatReportDataItems
{
    public string Label { get; set; }

    public NumDataType NumData { get; } = new NumDataType();

}

那么,我做错了什么?也许现在是我回家的时候了,明天我会看得更清楚,但我认为一些帮助是一个更安全的赌注......

由于一些评论者似乎在阅读我所写的内容时遇到问题,因此我尝试在此澄清:

  • 类 StatReportDataModel 的对象被传递到通用图表呈现例程(敲除 javascript 中的代码,调用 chart.js)。
  • List StatReportDataList 填充了类 StatReportDataItems 的对象,这些数据是从 DB 视图中读取的。
  • 例程 GetReport888 是负责获取数据的许多小例程之一,通常每个例程用于一份报告。它每个项目只返回一个数字数据,其他一些返回两个或三个。

一切正常,但我可以看到将 Numdata1 - Numdata3 更改为具有三个项目的 NumData[] 将简化一般的 js 代码。所以我想我应该做这个看似简单的改变。只有两个地方...

所以我创建了 NumDataType 并用该类型的一个属性替换了 StatReportDataItems 中的三个双属性。然后我将 GetReport888 更改为:

    public List<StatReportDataItems> GetReport888()
    {
        var query = from rv in ProcessDB.Report888Views
                    select new StatReportDataItems
                    {
                        Label = rv.Label,
                        NumData[0] = (double)rv.NumData1
                    };
        var retValue = query.ToList();
        return retValue;
    } // GetReport888

如果我做错了什么,我准备可能会收到一些“无法隐式转换......”类型的错误消息,而不是“当前上下文中不存在名称'NumData'”......

这是从 DB 视图生成的 Report888View 类:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Report888View")]
public partial class Report888View
{   
    private string _Label;      
    private System.Nullable<double> _NumData1;      
    public Report888View()
    {
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Label", DbType="VarChar(100)")]
    public string Label
    {
        get
        {
            return this._Label;
        }
        set
        {
            if ((this._Label != value))
            {
                this._Label = value;
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_NumData1", DbType="Float")]
    public System.Nullable<double> NumData1
    {
        get
        {
            return this._NumData1;
        }
        set
        {
            if ((this._NumData1 != value))
            {
                this._NumData1 = value;
            }
        }
    }
}

那么,为什么我会收到此特定错误?

编辑:在@howcheng 的帮助下,我得到了最终的 GetReport888:

public List<StatReportDataItems> GetReport888()
{
    List<StatReportDataItems> retValue = new List<StatReportDataItems>(); 
    fullmaktnodenProcessDB.Report888Views.ToList().ForEach(rv =>
    { 
        StatReportDataItems data = new StatReportDataItems
        {
            Label = rv.Label,
            NumData = new List<double> {
                (double)(rv.NumData1 == null ? 0.0 : rv.NumData1)
            },
        };
        retValue.Add(data);
    });
    return retValue;
}
好城

您得到“当前上下文中不存在名称‘NumData’”的原因是,当您使用对象初始化来填充您的对象时,您只能使用属性设置器并且您的NumData属性是只读的。但是即使您将其设置为可设置,您仍然无法直接使用索引器,因为您只能设置属性本身。

(旁注:您可以在初始化程序中使用索引器,但前提是索引器位于对象本身上(即,this[int index])。请参阅https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes -and-structs/how-to-initialize-objects-by-using-an-object-initializer了解详情。)

同时,假设您必须使用Report888View该类,并结合我上面关于 using 的评论IEnumerable<double>,那么这将起作用:

public class StatReportDataItems
{
    public StatReportDataItems()
    {
        NumData = new List<double>();
    }

    public string Label { get; set; }

    public IEnumerable<double> NumData { get; set; }
}

public List<StatReportDataItems> GetReport888()
{
    var query = from rv in ProcessDB.Report888Views
                select new StatReportDataItems
                {
                    Label = rv.Label,
                    NumData = new List<double> { rv.NumData1, rv.NumData2, rv.NumData3 },
                };
    var retValue = query.ToList();
    return retValue;
} // GetReport888

小提琴:https : //dotnetfiddle.net/q84TwK

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在另一个类中使用类属性?

来自分类Dev

如何在另一个类中使用一个类?

来自分类Dev

如何在另一个类中使用扩展功能?C#

来自分类Dev

如何在另一个视图模型中使用一个模型属性?

来自分类Dev

如何在另一个生成字节码类中使用匿名类实例

来自分类Dev

如何在类外的另一个函数中使用类的方法?

来自分类Dev

如何在另一个数组中使用数组的索引?

来自分类Dev

在另一个类中使用一个类的属性

来自分类Dev

如何在另一个类中的一个类中使用Android getContext?

来自分类Dev

Java:如何在另一个类中使用在一个类中实例化的对象?

来自分类Dev

Python 2.7:如何在另一个类中使用一个类的对象?

来自分类Dev

如何在另一个类的方法中使用来自单独类的一个对象?

来自分类Dev

我如何在另一个类中使用一个类中的方法(是否可能)

来自分类Dev

如何在C ++中的另一个模板函数中使用属于模板化类的嵌套类型?

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

如何在 C# 中使用来自另一个类的初始化实例对象?

来自分类Dev

从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

来自分类Dev

从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

来自分类常见问题

如何在另一个Java类的Java方法中使用变量值?

来自分类Dev

如何在Typescript类中声明的函数在该类的另一个函数中使用?

来自分类Dev

如何在另一个类中使用onActivityResult

来自分类Dev

如何在Swift中使用泛型对另一个类进行子类化?

来自分类Dev

如何在另一个类中使用Queue.java

来自分类Dev

OpenFL-如何在另一个类中使用addChild?

来自分类Dev

如何在python中的不同类中使用另一个类方法值?

来自分类Dev

如何在python中使用另一个实例的类名创建实例?

来自分类Dev

如何在虚幻脚本中使用另一个类中的变量?

来自分类Dev

如何在另一个类中使用ArrayList?

来自分类Dev

如何在另一个类中使用Queue.java

Related 相关文章

  1. 1

    如何在另一个类中使用类属性?

  2. 2

    如何在另一个类中使用一个类?

  3. 3

    如何在另一个类中使用扩展功能?C#

  4. 4

    如何在另一个视图模型中使用一个模型属性?

  5. 5

    如何在另一个生成字节码类中使用匿名类实例

  6. 6

    如何在类外的另一个函数中使用类的方法?

  7. 7

    如何在另一个数组中使用数组的索引?

  8. 8

    在另一个类中使用一个类的属性

  9. 9

    如何在另一个类中的一个类中使用Android getContext?

  10. 10

    Java:如何在另一个类中使用在一个类中实例化的对象?

  11. 11

    Python 2.7:如何在另一个类中使用一个类的对象?

  12. 12

    如何在另一个类的方法中使用来自单独类的一个对象?

  13. 13

    我如何在另一个类中使用一个类中的方法(是否可能)

  14. 14

    如何在C ++中的另一个模板函数中使用属于模板化类的嵌套类型?

  15. 15

    C ++-如何在另一个类中使用私有构造函数实例化对象

  16. 16

    如何在 C# 中使用来自另一个类的初始化实例对象?

  17. 17

    从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

  18. 18

    从Java到C ++:如何在另一个自定义类中使用一个自定义类var?

  19. 19

    如何在另一个Java类的Java方法中使用变量值?

  20. 20

    如何在Typescript类中声明的函数在该类的另一个函数中使用?

  21. 21

    如何在另一个类中使用onActivityResult

  22. 22

    如何在Swift中使用泛型对另一个类进行子类化?

  23. 23

    如何在另一个类中使用Queue.java

  24. 24

    OpenFL-如何在另一个类中使用addChild?

  25. 25

    如何在python中的不同类中使用另一个类方法值?

  26. 26

    如何在python中使用另一个实例的类名创建实例?

  27. 27

    如何在虚幻脚本中使用另一个类中的变量?

  28. 28

    如何在另一个类中使用ArrayList?

  29. 29

    如何在另一个类中使用Queue.java

热门标签

归档