Подтвердить что ты не робот

Тип возврата менее доступен, чем метод

Я новичок в 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];
    }
}
4b9b3361

Ответ 1

Сделайте класс Recipe общедоступным.

Ответ 2

Ваш класс рецептов менее доступен, чем метод. Вы должны проверить, что Рецепт не является частным/внутренним, и что вы можете видеть класс рецепта из-за пределов этого класса (быстрое исправление объявляет рецепт открытым классом).

Как отметил Майкл Стам в комментарии ниже, классы без модификатора доступа по умолчанию являются внутренними или частными (если это вложенный класс). Возможно, это проблема, и вы можете просто объявить class Recipe вместо public class Recipe

Ответ 3

Как ясно указано в сообщении об ошибке, класс Recipe менее доступен (например, не public), чем ваш метод.

Ответ 4

Синтаксическая ошибка?

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

Ответ 5

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

Ответ 6

Сделайте свой класс общедоступным. Без этого U ничего не может вернуть.

Ответ 7

Убедитесь, что степень видимости класса "Рецепт" является закрывающей, где вы хотите получить к ней доступ.

Ответ 8

Сделайте метод внутренним. Надеюсь, что это сработает.