是否可以写出类似以下的内容?
public const string[] Titles = { "German", "Spanish", "Corrects", "Wrongs" };
Run Code Online (Sandbox Code Playgroud) 这是我用这个地方作为我的"去"以获得关于什么有效/无效/为什么等的一般意见的第一个问题.那么让我们试试吧......
凭借我有限的经验,我一直试图找到更好的创建固定数据字段的方法,我可以在整个程序中参考这些字段 - 例如我反复显示的最终用户可查看的字符串以及其他参数.我希望保持不变并保持安全.我将我重用的数据保存在单独的静态类中,并将我的字符串放在我private static readonly通过私有包装公开的数组中,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; } }
}
}
Run Code Online (Sandbox Code Playgroud)
我理解的很多,但现在我有一个二维数据表(int),我需要以一种我可以访问的类似非暴露的方式存储.
这个数据正在进入它自己的类,因为现在我正在处理一个单独的真实数据类型.实际情况 - 我有不同的燃料及其相关的燃烧常数,我需要使用我从气体分析仪获得的数据进行燃烧分析.所以我想保持这些数组/列表与他们所有的方法分开,但我似乎无法弄清楚如何做到这一点.
如果我喜欢我之前做过并通过数组路径(但这次是2D),那么我遇到的问题似乎(根据MSDN上的信息)Array.AsReadOnly(myArray)只适用于一维数组.我不够精明,不知道如何编写我自己的解决方案(假设这是一个足够简单的任务).那么如果我去尝试使用锯齿状数组,因为这似乎是我发现的另一条可行路径,我会陷入困境,试图弄清楚如何以及在何处创建初始锯齿状数组(构造函数或类方法)和那么在那里初始化数组呢?
如果我不需要保护数组,那么我可以将它全部放在构造函数中,这可能没问题(据我所知,到目前为止)但我必须保持它不暴露.第一种方式我理解程序化如何适应类,但试图使用非暴露的锯齿状数组让我陷入困境.我在网上看到的所有例子似乎都是创建它们并初始化main其中很好(虽然暴露)但是当我把它放在其他地方时,如何让它可用于任何可能需要数据而不暴露它们的东西?
希望你理解为什么我觉得我要进入圈子,也许答案非常简单,我错过了显而易见的但是直到我看到其他人做类似的事情,我无法弄明白,我也无法理解找到足够接近的东西来给我提供线索.如果在SO上已经存在类似的帖子,请指出我的方向.就像我说的那样,我已经搜索了MSDN,SO并在网上搜索面包屑.
如果您需要更多关于我一直在努力的信息并感谢阅读,请告诉我.
我刚刚在这个问题上添加了标签,看到有一个数据标签,所以我想知道我是否可以在那里缩小范围.不确定我是否应该添加该标签,我还可以添加列表......?
在C++中,如果我想在编译时初始化一个对象并且之后永远不会改变,我只需添加前缀const.
在C#中,我写道
// file extensions of interest
private const List<string> _ExtensionsOfInterest = new List<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
并得到错误
除string之外的引用类型的const字段只能用null初始化
然后我研究了Stack Overflow上的错误,并提出了"解决方案" ReadOnlyCollection<T>.除字符串之外的引用类型的const字段只能使用null Error初始化
但这并没有真正给我我想要的行为,因为
// file extensions of interest
private static ReadOnlyCollection<string> _ExtensionsOfInterest = new ReadOnlyCollection<string>()
{
".doc", ".docx", ".pdf", ".png", ".jpg"
};
Run Code Online (Sandbox Code Playgroud)
仍然可以重新分配.
那么我该怎样做我想做的事情呢?
(令人惊讶的是,除了我想要的语言之外,C#还具有所有语言功能的可模仿性.