c# strip - il tipo restituito è meno accessibile del metodo



html remove (8)

Rendi pubblica la classe Recipe .

Sono nuovo di c# ed ecco un estratto da un progetto personale su cui sto lavorando per fare esperienza.

Quando si chiama la funzione getRecipe() all'esterno di questa classe, mi viene presentato il seguente errore. Voglio mantenere la mia List privata nella classe di CookBook , ma sono comunque in grado di ottenere un riferimento a una delle Recipes della List . Non voglio rendere pubblica la mia List .

Ogni consiglio è molto apprezzato! Grazie

L'errore

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];
    }
}

Controlla per verificare se la visibilità della classe 'Ricetta' è coperta in cui desideri accedervi.


Come afferma chiaramente il messaggio di errore, la classe Recipe è meno accessibile (ad esempio, non public ) del tuo metodo.


Rendi pubblica la tua classe .. Senza che U non possa restituire nulla


La tua classe di ricette è meno accessibile rispetto al metodo. È necessario verificare che la ricetta non sia privata / interna e che sia possibile visualizzare la classe Recipe dall'ambito di quella classe (la correzione rapida dichiara la ricetta come una classe pubblica).

Come indicato da Michael Stum in un commento di seguito le classi senza un modificatore di accesso sono di default sia interne che private (se si tratta di una classe nidificata). Questo è probabilmente il tuo problema e potresti aver appena dichiarato la class Recipe invece della public class Recipe


Errore di sintassi?

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

dovrebbe essere:

private List<Recipe> listOfRecipes = new List<Recipe>();

Inoltre, puoi semplicemente usare LINQ per ottenere il risultato, non sono in VS, ma qualcosa del genere ...

public Recipe getRecipe(string name)
{
    return listOfRecipes.Where(c => c.RecipeName == name).SingleOrDefault();
}

Rendi il metodo interno. Spero che funzionerà.


Usa typeof quando vuoi ottenere il tipo al momento della compilazione . Usa GetType quando vuoi ottenere il tipo al momento dell'esecuzione . Raramente ci sono casi da usare come fa il cast e, nella maggior parte dei casi, si finisce col castare comunque la variabile.

C'è una quarta opzione che non hai considerato (specialmente se hai intenzione di lanciare un oggetto per il tipo che trovi anche tu); quello è usare as

Foo foo = obj as Foo;

if (foo != null)
    // your code here

Questo utilizza solo un cast considerando questo approccio:

if (obj is Foo)
    Foo foo = (Foo)obj;

ne richiede due .





c# .net