【问题标题】:Return list class type from private class?从私有类返回列表类类型?
【发布时间】:2016-04-25 02:19:33
【问题描述】:

我想返回一个私有类类型的列表。假设这种情况:

class Article_GET
{
    public class Article
    {
         public string name {get; set;}
         public string description {get;set;}
    }
}

现在我有另一个带有 Article 类的文件,在这个类中我有方法 GetArticles(),它创建一个访问 Article 类的 Article 列表,该类在 Article_GET 中可用。检查:

public static List<Article_GET.Article> GetArticles()
{
     return new Article_GET().GetArticle(); //Method in Article_GET
}

调用Article_GET().GetArticle(); 的类Article 是一个dll 包装器。现在有一个问题。你怎么能看到class Article_GET 是私人的所以我收到了这个错误:

不一致的可访问性:返回类型 List List GET.List>比“List.GetList(字符串方法)”文章更难访问

'因为应该是public class Article_GET。但我希望这个类只能在 dll 程序集中内部使用。我尝试将 internal 放入,但同样的问题,我无法将 Article_GET.Article 的特定列表从私有/内部类返回到公共方法。

我该如何解决这个问题?

更新(建议使用新结构):

namespace MyCompany.Product.Article.GET.Article
{
    internal class Article
    {
        public string name {get;set;}
        public string description {get;set;}
    }

    class Article_GET
    {
        public class RootObject
        {
            public List<Article> article { get; set; }
        }

        public List<Article> GetArticle()
        {   
            var obj = JsonConvert.DeserializeObject<RootObject>("json");
            return obj.article;
        }
    }
}

和包装器:

namespace MyCompany.Product.Article
{
    public class Article
    {
        public static List<GET.Article.Article> GetArticles()
        {
            return new Article_GET().GetArticle();
        }
    }
}

【问题讨论】:

  • 可以将内部类返回到同一程序集中的公共方法。您不能从公共类的公共方法返回它。所以你应该宁愿map that internal class to some public class 而是返回那个公共的。请发帖the actual code that fails - 这样可以避免我们进行大量猜测,并提高获得可靠答案的机会。
  • @EugenePodskal 如果我声明了internal class Article_GET,我会在公共方法上获得不一致的可访问性。也许我误解了你的意思?我会看看你链接的例子。
  • 我的意思是GetArticles是公共类中的公共方法。而Article_GET.Article 是一个内部类(它的外部“父”类是内部的)。然后您尝试从您的公共 GetArticles 方法返回 Article_GET.Article。如果我没听错的话,您可能打算返回一些 Article_PubliclyVisible.Article ,这是一个完全独立于 Article_GET.Article 的公共类。
  • @EugenePodskal 好吧,现在很清楚,我会尝试修复演员转换,但显然不一致错误已消失

标签: c#


【解决方案1】:

Article移出课堂Article_GET

internal class Article_GET
{
}

public class Article
{
     public string name {get; set;}
     public string description {get;set;}
}

【讨论】:

  • 哦,我没想到。但现在我在public static List&lt;Article&gt; GetArticles() 中得到Implicit cast from System.Collections.Generic.List&lt;Article.Get.Article.Article&gt; in System.Collections.Generic.List&lt;Article.Get.Article.Article_GET.Article&gt;
  • @Dillinger 从 Article 中移除 Article_GET 前缀,因为它不再是嵌套类并且完全限定类型名称不同
  • 我理解错误,是Article_GET类中的方法public List&lt;Article&gt; GetArticle,现在又出现不一致错误
  • 您可以将您的代码添加到问题中吗? Article 类是直接在命名空间中吗,GetArticle 方法在哪里?
  • @Dillinger 你不能有一个与命名空间名称相同的类名。将命名空间中的Article 更改为其他内容。
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2012-06-09
  • 2014-11-20
  • 2014-12-09
相关资源
最近更新 更多