Tablica parametrów

Tablica parametrów
SH
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 5 lat
  • Lokalizacja:Wrocław
  • Postów:24
0

Witam,

Mam problem z przekazaniem parametrów do funkcji tzn.mam funkcję w pewnej klasie gdzie zastosowane są typy niegeneryczne :

Kopiuj
 public static DataTable CreateTable(string select, params object[] values)
        {
            return (DataTable) LendReader(select, new BorrowReader(DataServices.CreateTable), values);
        }

Rozumiem że pierwszy parametr muszę wrzucić normalnie a resztę mogę poprzez tablice i tutaj jest kłopot.
Chciałbym wrzucić do niej tablice parametrów (wszystkie parametry są stringami) próbowałem utworzyć zwykłą tablice, ArrayList lecz wyrzuca mi błąd.

Czy mógłby ktoś podpowiedzieć jak to zrobić?
Z góry dziękuje za odpowiedzi.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
1

Dobra wywalam te dwa posty i napiszę Ci od nowa:

Słowo kluczowe params służy do tego, żeby w argumencie metody była od razu tworzona tablica bez konieczności jej tworzenia przed wywołaniem. Dzięki temu masz metodę ze zmienną ilością argumentów. Takie wywołanie jak to niżej jest najbardziej pasujące do Twojego przykładu:

Kopiuj
namespace Program {
    class Program {
        public static void Foo(string str, params object[] array) {
            Console.WriteLine("First arg: " + str + "\n\nArray:");
            array.ToList().ForEach(prm => Console.WriteLine(prm.ToString())); 
        }

        static void Main(string[] args) { 
            Foo("first", "one", "two"); 
        }
    }
}

Jeżeli natomiast tworzysz tablicę przed metodą gdzieś tam w kodzie to params jest niepotrzebne. Jak widzisz poniższe rozwiązanie działa bez problemu:

Kopiuj
namespace Program {
    class Program {
        public static void Foo(string str, object[] array) {
            Console.WriteLine("First arg: " + str + "\n\nArray:");
            array.ToList().ForEach(prm => Console.WriteLine(prm.ToString())); 
        }

        static void Main(string[] args) {
            var array = new string[2];
            array[0] = "one";
            array[1] = "two";

            Foo("first", array); 
        }
    }
}

PS: Oczywiści w drugim przypadku z params też zadziała.

edytowany 3x, ostatnio: grzesiek51114
SH
Dzięki Ci pięknie, działa ! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.