【问题标题】:Reference stored values of a dictionary from another namespace从另一个命名空间引用字典的存储值
【发布时间】:2015-04-21 22:12:06
【问题描述】:

我将术语存储到一个有点复杂(至少对我而言)类型的字典中:

Dictionary<string, Term>  

其中“术语”是我使用“出现次数”列表定义的类,如下面的代码所示。

 namespace SomeNameSpace
 {
    public class Occurence
    {
        public int docID { get; set; }
        public int termOcc { get; set; }
    }

    public class Term
    {
        public int numbOfDocuments { get; set; }
        public int lastDocAdd { get; set; }
        public int termCount { get; set; }

        public List<Occurence> docOccurances = new List<Occurence>();
    }

    public class TermDictionary
    {
        public Dictionary<string, Term> termOccurence = new Dictionary<string, Term>();
    }

    public static void SomeMethod()
    {
        TermDictionary TermDictionary = new TermDictionary();
 .
 .
 .

当 void 函数“SomeMethod”完成时,将返回到调用命名空间,它不是“SomeNameSpace”,而是某个其他命名空间。

我想在另一个命名空间中使用字典中存储的值,以便我可以根据用户输入的查询访问字典。

有没有办法让这个字典中的数据持久化,以便我可以从另一个命名空间访问它?或者也许是一种将字典传递到另一个命名空间以便我可以在那里使用它的方法?

【问题讨论】:

  • 我看不出是什么阻止了你这样做。 SomeMethod 如何“返回”新对象?调用SomeMethod 的代码如何尝试使用该对象?错误在哪里?
  • 我很困惑——“返回调用命名空间”是什么意思?您的方法不返回任何内容或设置任何类成员(您的构造函数也没有)。你期望发生什么?
  • 调用方法的不是namespaces,而是属于类的方法(在命名空间中,但只是为了避免类名冲突)调用其他方法并使用返回值。此外,您的方法SomeMethod 不能在任何类之外。
  • 你在课堂上有这个方法吗?您可以使用静态类来调用您的静态方法。
  • 抱歉,有任何混淆,此方法是从另一个命名空间中的另一个方法调用的。该方法做了很多事情,而且做得很好。我实际上是将字典数据打印到输出文件中,但在那之后我想再次从另一个命名空间访问字典的值。为了简化我的问题,我省略了很多代码。

标签: c# .net dictionary namespaces


【解决方案1】:

命名空间在这里不太重要。您应该考虑的实际边界是类边界。我如何在课堂之间获取信息?命名空间只是将志同道合的类标记在一起的一种合乎逻辑的方式。

也就是说,返回字典是实现你想要的一种粗略的方式。但是这里的一个问题是它是你的内部状态,另一个类可以改变它。因此,要么将其作为只读字典以快乐的方式发送,要么将其包装在一个小服务接口中,该接口仅公开一个查找方法以隐藏内部 - 在本例中为字典本身。

【讨论】:

  • 以快乐的方式发送它是我想要解决的问题。我该如何做到这一点?
  • 如果另一个命名空间中的类要使用上面的类之一,则需要在文件顶部添加一个带有命名空间的 using 指令: using SomeNamespace;
  • 命名空间为编译器提供了一些线索,让他们知道在哪里寻找代码中使用的类型。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
相关资源
最近更新 更多