Ответ 1
Сделайте класс Recipe
общедоступным.
Я новичок в c#
и вот отрывок из личного проекта, над которым я работаю, чтобы получить некоторый опыт.
При вызове функции getRecipe()
вне этого класса я получаю следующую ошибку. Я хочу, чтобы мой List
был закрыт для класса CookBook
, но все же мог получить ссылку на один из Recipes
в List
. Я не хочу публиковать свой List
.
Любые советы приветствуются! Благодаря
Ошибка
return type 'cookbook.Recipe is less accessible than method 'cookbook.CookBook.getRecipe(string)'
public class CookBook
{
private List<Recipe> listOfRecipes = new List<Recipe> {};
public Recipe getRecipe(string name)
{
int i = 0;
while (listOfRecipes[i].getRecipeName() != name)
{
i++;
}
return listOfRecipes[i];
}
}
Сделайте класс Recipe
общедоступным.
Ваш класс рецептов менее доступен, чем метод. Вы должны проверить, что Рецепт не является частным/внутренним, и что вы можете видеть класс рецепта из-за пределов этого класса (быстрое исправление объявляет рецепт открытым классом).
Как отметил Майкл Стам в комментарии ниже, классы без модификатора доступа по умолчанию являются внутренними или частными (если это вложенный класс). Возможно, это проблема, и вы можете просто объявить class Recipe
вместо public class Recipe
Как ясно указано в сообщении об ошибке, класс Recipe
менее доступен (например, не public
), чем ваш метод.
Синтаксическая ошибка?
private List<Recipe> listOfRecipes = new List<Recipe> {};
должен быть:
private List<Recipe> listOfRecipes = new List<Recipe>();
Кроме того, вы можете просто использовать LINQ для получения результата, я не в VS, но что-то вроде этого...
public Recipe getRecipe(string name)
{
return listOfRecipes.Where(c => c.RecipeName == name).SingleOrDefault();
}
public DataSet Country12()
{
LntSqlClient mySqlClient = new LntSqlClient(ConfigurationManager.AppSettings.Get("Data source=172.31.60.228;initial catalog=Trainee;Trusted_Connection=True;"));
LntSqlParams myParam = new LntSqlParams();
DataSet dset = new DataSet();
//string strout;
try
{
myParam.SPName = "dbo.GetState7";
myParam.addParameter("@CityId", ddlCity9.SelectedValue, mySqlClient);
dset = mySqlClient.lntDataSet(myParam);
//strout = myParam.LntSQLOutputParams("@error").Value.ToString();
return dset;
}
catch (Exception ex)
{ throw ex; }
finally
{ mySqlClient.closeConnection(); }
}
Сделайте свой класс общедоступным. Без этого U ничего не может вернуть.
Убедитесь, что степень видимости класса "Рецепт" является закрывающей, где вы хотите получить к ней доступ.
Сделайте метод внутренним. Надеюсь, что это сработает.