Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将二维整数存储为单独类中的只读/常量,同时保持非公开_C#_.net 4.0 - Fatal编程技术网

C# 将二维整数存储为单独类中的只读/常量,同时保持非公开

C# 将二维整数存储为单独类中的只读/常量,同时保持非公开,c#,.net-4.0,C#,.net 4.0,这是我用这个地方作为“去”的第一个问题,我想了解一下什么有效/不有效/为什么有效等等。让我们试试这个 以我有限的经验,我一直在努力寻找更好的方法来创建固定数据字段,我可以在整个程序中引用这些字段,比如我反复显示的最终用户可视字符串,以及我希望保持不变且不受更改的其他参数。我将重复使用的数据保存在单独的静态类中,并将字符串放在私有静态只读数组中,通过使用私有ILists中的包装来公开这些数组,这些数组具有返回我要查找的单个字符串的公共getter。希望到目前为止我没有滥用术语! 到目前为止我所做的

这是我用这个地方作为“去”的第一个问题,我想了解一下什么有效/不有效/为什么有效等等。让我们试试这个

以我有限的经验,我一直在努力寻找更好的方法来创建固定数据字段,我可以在整个程序中引用这些字段,比如我反复显示的最终用户可视字符串,以及我希望保持不变且不受更改的其他参数。我将重复使用的数据保存在单独的静态类中,并将字符串放在
私有静态只读
数组中,通过使用私有
ILists
中的包装来公开这些数组,这些数组具有返回我要查找的单个字符串的公共getter。希望到目前为止我没有滥用术语! 到目前为止我所做的:

namespace MyNamespace
{
    public static partial class Tables
    {
          private static readonly string[] _Messages =
                  {
                      "One",
                      "Two"
                  };

          private static readonly IList<string> MessagesReadOnly = Array.AsReadOnly(_Messages);
          public static IList<string> Messages { get { return MessagesReadOnly; } }
    }
}
名称空间MyNamespace
{
公共静态部分类表
{
私有静态只读字符串[]\u消息=
{
“一个”,
“两个”
};
私有静态只读IList MessagesReadOnly=Array.AsReadOnly(_Messages);
公共静态IList消息{get{return messagesreadoly;}}
}
}
我明白这一点,但现在我有了一个二维数据表(
int
),我需要以类似的非公开方式存储它,以便访问。
这些数据将进入它自己的类,因为现在我正在处理一个单独的真实数据类型。 真实场景-我有不同的燃料及其相关的燃烧常数,我需要使用从气体分析仪获得的数据进行燃烧分析。因此,我想将这些数组/列表与其所有方法分开,但我似乎不知道如何做到这一点

如果我像以前一样,通过数组的路径(但这次是2D),那么我会遇到一个问题,即
array.AsReadOnly(myArray)
似乎只适用于一维数组。我不够精明,不知道如何编写自己的代码来解决这个问题(假设这是一个足够简单的任务)。因此,如果我尝试使用锯齿状数组,因为这似乎是我找到的另一种可行的方法,我会陷入困境,试图找出如何以及在何处创建初始锯齿状数组(构造函数或as类方法),然后在其中初始化数组呢

如果我不需要保护数组,那么我可以把它全部放在构造函数中,这可能没问题(据我所知),但我必须保持它不暴露。我第一次理解如何在编程上适合类,但试图使用未公开的锯齿数组,这让我搞糊涂了。我在web上看到的所有示例似乎都是在
main
中创建和初始化的,这很好(虽然已公开),但当我将其放在其他地方时,如何在不公开数据的情况下将其提供给任何可能需要数据的对象

希望你能理解为什么我觉得自己在兜圈子,也许答案很简单,我忽略了显而易见的东西,但直到我看到其他人做了类似的事情,我才明白,而且我还没有找到足够近的东西来给我线索。如果已经有一个类似的职位上,所以请告诉我在那个方向。正如我所说,我已经搜索了这两个MSDN,所以我在网上漫游寻找面包屑

如果你需要更多关于我一直尝试的信息,请告诉我,谢谢阅读

我刚刚在这个问题上添加了标签,看到了一个数组标签,所以我想看看是否可以缩小范围。不确定我是否也应该添加该标记,我还可以添加列表

这些数据将进入它自己的类,因为现在我正在处理一个单独的真实世界数据t

如果要将其存储在自定义类中,只需为该类编写一个

这看起来像:

private YourType[,] internalArray; // Create and set this up in constructor or elsewhere...


public YourType this[int row, int column]
{
     get 
     {
          return internalArray[row,column];
     }
{

可以在静态类的静态构造函数中初始化锯齿数组

所以

公共静态只读IList数组;
静态表(){
//初始化数组
//使其只读
列表ar1=新列表();
对于(int i=0;i<10;i++)
{
列表ar2=新列表();
对于(int j=0;j<10;j++)
{
ar2.加入(j);
}
ar1.Add(ar2.AsReadOnly());
}
array=ar1.AsReadOnly();
}

您不能为此使用
列表,并定义一个只有用于检索数据的getter的公共只读属性。

tl;博士有什么问题吗?听起来像是存储在程序集资源中的那种数据。@Gabe:很抱歉,您认为这太长了,只是具体地告诉我到目前为止所做的工作。是的,有一个问题在那里,所以这8段都只是问“我如何创建一个不可变的2D数组”?是的。。。如果我知道我所要做的就是问“我如何创建一个不可变的2D数组?”那么我就会问这个问题。有很多问题,所以比这要长得多-你是否也要强调“tl dr”呢?每个人都必须从某个地方开始,而现在我并不总是知道如何用10个字或更少的话问我想要什么,或者我应该在我的问题中给出或不给出多少信息。当你学习一些东西时,这就是问题所在。问题是这样他就失去了数组的可枚举性和长度属性。@xanatos:我不这么认为
internalArray
是一个锯齿状数组,所以我们有这些属性,我们甚至可以为此定义一些公共属性。@xanatos:如果他的类实现了
IEnumerable
和/或
ICollection
,就不会了-根据需要很容易重新公开这些信息。是的。。。这正变得越来越完整。。。您可以/应该添加一个IList@xanatos:我真的会推荐阿金斯
public static readonly IList<IList<int>> array;

static Tables() {
    // Init array
    // Make it read only
    List<IList<int>> ar1 = new List<IList<int>>();

    for (int i = 0; i < 10; i++)
    {
        List<int> ar2 = new List<int>();
        for (int j = 0; j < 10; j++)
        {
            ar2.Add(j);
        }
        ar1.Add(ar2.AsReadOnly());
    }

    array = ar1.AsReadOnly();
}