【发布时间】:2022-01-01 05:13:48
【问题描述】:
我正在尝试通过使用部分类以下列方式访问字典。这样做的最终目的是公开这个字典并允许不同的方法直接读取/写入它。
FilenameABC.cs 有这个代码,到目前为止对我来说似乎没问题:
namespace Namespace1
{
partial class ClassA
{
public class ExampleDictionary
{
private Dictionary<int, string> _dict;
public ExampleDictionary()
{
_dict = new Dictionary<int, string>();
}
}
}
}
FilenameDEF.cs 有这个代码,这就是我遇到困难的地方。我不确定为什么 .Add 方法不起作用。在第一个中,我试图在创建 ExampleDictionary 类的实例之后使用它,这似乎很违反直觉(当然,鉴于我目前的知识水平)。在第二个中,我尝试从方法内部添加元素,即
namespace Namespace1
{
partial class ClassA
{
ExampleDictionary instanceOfDict = new ExampleDictionary();
instanceOfDict.Add(1, "Test1"); // This does not work
public static void FunctionA()
{
for (int i = 0; i < 10; i++)
{
string text = $"Test{i}";
instanceOfDict.Add(i, text); // This does not work as well
}
}
}
}
有人可以帮忙吗?
【问题讨论】:
-
您需要继承
Dictionary或公开方法,但您为什么要这样做?看来您甚至根本不需要ExampleDictionary类。 -
首先,没有Partial Class这样的东西。
partial关键字只是表明一个类可以在多个文件中定义。类的定义规则保持不变,只是一些类成员可以定义在一个文件中,而其他部分可以定义在其他文件中。但是,定义规则保持不变。特别是,只有类成员可以定义在顶级,即直接在class MyClass { /* stuff */ }级别内。您的代码:instanceOfDict.Add(1, "Test1");是一个函数调用,它不能存在于类的顶层 -
我刚刚注意到第二个不起作用。这是对问题的糟糕描述 - 您有完整的错误消息,请与我们分享。你得到一个编译器错误吗?我猜第一个错误描述了我在第一条评论中所说的内容。第二个错误可能是因为静态方法无法访问实例成员。最后,解释一下您要做什么会很有用。
-
嗨@zaggler。这样做的最终目的是“公开”字典并允许不同的方法直接读取/写入它。也许我缺少的是这种“曝光”本身,但我不知道该怎么做。
-
你好@Flydog57。感谢您的帮助。当涉及到第二个“错误”时,没有编译错误。在编写代码时,我只是没有将 '.Add' 视为一种方法。我看到“Equals”、“GetHashCode”、“GetType”和“ToString”。一旦这被声明为字典,我不明白为什么我看不到字典方法。正如您所说,我很确定问题是“静态方法无法访问实例成员”,但我不确定我应该怎么做。这样做的最终目的只是公开这个字典并允许不同的方法直接读取/写入它。
标签: c# dictionary properties getter-setter partial-classes