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();
}