C# 返回类型的可访问性不如方法

C# 返回类型的可访问性不如方法,c#,.net,C#,.net,我是新来的c,这里是我为获得一些经验而进行的一个个人项目的摘录 在这个类之外调用getRecipe()函数时,出现了以下错误。我想将我的列表保密给烹饪书类,但仍然能够获得列表中一个食谱的参考。我不想公开我的列表 非常感谢您的建议!谢谢 错误 return type 'cookbook.Recipe is less accessible than method 'cookbook.CookBook.getRecipe(string)' 公共类食谱 { private List of Reci

我是新来的
c
,这里是我为获得一些经验而进行的一个个人项目的摘录

在这个类之外调用
getRecipe()
函数时,出现了以下错误。我想将我的
列表
保密给
烹饪书
类,但仍然能够获得
列表
中一个
食谱
的参考。我不想公开我的
列表

非常感谢您的建议!谢谢


错误

return type 'cookbook.Recipe is less accessible than method 'cookbook.CookBook.getRecipe(string)'

公共类食谱
{
private List of Recipes=新列表{};
公共配方getRecipe(字符串名称)
{
int i=0;
while(引用列表[i].getRecipeName()!=name)
{
i++;
}
返回目录[一];
}
}
语法错误

private List<Recipe> listOfRecipes = new List<Recipe> {};

您的Recipe类比方法更难访问。您应该检查Recipe不是私有/内部的,并且可以从该类范围之外看到Recipe类(快速修复将Recipe声明为公共类)


正如Michael Stum在下面的评论中指出的,没有访问修饰符的类默认为内部类或私有类(如果是嵌套类)。这可能就是您的问题所在,您可能刚刚声明了
class Recipe
而不是
public class Recipe

,正如错误消息明确指出的那样,
Recipe
类不易访问(例如,非
public
)将
配方
类公开。

将方法内部化。希望它能起作用。

将你的类公开。否则你不能返回任何内容。

检查“配方”类的可见性是否覆盖了你想要访问它的地方。

在C#中,默认情况下,类是
私有的,因此访问级别是有限的。

将您的模型类声明为public(Recipe)为
public

我忘记了c中的类在默认情况下是私有的。。。谢谢。@prolink007:默认情况下,类是
内部的
,而不是
私有的
。事实上,只有嵌套类才能
private
.Bam。简短而甜蜜。只有几点建议:您可以使用LINQ使代码更简洁:
返回recipes.FirstOrDefault列表(recipe=>recipe.getRecipeName().Equals(name,StringComparison.invariantCultureInogoreCase))。如果请求一个不存在的配方(它将抛出一个IndexOutOfRangeException),您当前的代码将失败,并且它将进行区分大小写的比较(因此“cake”将找不到“cake”)。最后一个建议是,不要使用getRecipeName或getRecipe这样的名称。使用PascalCase(GETKEN),并考虑属性/索引器(CooBooo[[饼] ]或CuoBoxx。食谱[蛋糕],食谱。名称。谢谢你的建议,我现在正在看LINQ。LINQ语句中的“=>”是什么意思?它是lambda函数。我基本上是在声明一个函数(一个所谓的“谓词”)
private bool DoesRecipeMatch(Recipe Recipe,string name){return Recipe.getRecipeName().Equals(name,StringComparison…)}
,然后LINQ语句执行
foreach(listOfRecipes中的Recipe Recipe){if(doesrecipe,name)){return Recipe;}返回默认值(菜谱);}
。换句话说,它或多或少做了您所做的事情(除了迭代中的错误),但它更简洁,关注您的意图(找到名称匹配的菜谱),而不是单个步骤(迭代、比较、返回)还可以看到Joseph Daigle对这个问题的回答:我也是-我本以为乍一看是不会编译的:)感谢LINQ的建议,现在就开始研究它。因为他是新来的:任何没有修饰符的类都是我的默认内部类,除了私有的嵌套类(我认为)。欢迎使用StackOverflow!正如你所知,这个问题的答案大约在5年前就被接受了。如果您想在已有的答案中添加更多详细信息,请尝试在您的答案中更具描述性。谢谢
private List<Recipe> listOfRecipes = new List<Recipe> {};
private List<Recipe> listOfRecipes = new List<Recipe>();
public Recipe getRecipe(string name)
{
    return listOfRecipes.Where(c => c.RecipeName == name).SingleOrDefault();
}