Witam,
Tworzę plugin do jednego programu i w jednej z sekcji pluginu muszę zdefiniować poniższy schemat:
"NazwaFunkcji1", paramDodatkowyTypuInt1, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
"NazwaFunkcji2", paramDodatkowyTypuInt2, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
"NazwaFunkcji3", paramDodatkowyTypuInt3, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
Następnie w innej metodzie obrabiam te dane w jednej pętli podstawiając do odpowiednich zmiennych dane z powyższej tabeli.
Proszę o pomoc jak mogę ułatwić sobie życie. Jak zrobi taką tablicę?
- Rejestracja:prawie 12 lat
- Ostatnio:około rok
- Postów:55

- Rejestracja:prawie 12 lat
- Ostatnio:około rok
- Postów:55
Ok. Zrobiłem tak:
public class MojeDane
{
public string nazwaFunkcji;
public int paramDodatkowy;
public int iloscParametrowUsera;
public int[] parametryUsera;
}
List<MojeDane> mojedane = new List<MojeDane>();
mojedane.Add(new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } });
Można lepiej?

- Rejestracja:ponad 21 lat
- Ostatnio:4 minuty
Jeśli elementy listy masz z góry znane to możesz zainicjalizować listę tak:
List<MojeDane> mojedane = new List<MojeDane>
{
new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } },
new MojeDane { nazwaFunkcji = "MyFunction2", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } }
};
Tylko ponazywaj to jakoś wszystko inaczej, nie iloscParametrowUsera, błagam.
Poza tym akurat ilość parametrów ci nie potrzebna jako osobna wartość, zawsze możesz pobrać rozmiar tablicy.
- Rejestracja:prawie 12 lat
- Ostatnio:około rok
- Postów:55
Azarien napisał(a):
Jeśli elementy listy masz z góry znane to możesz zainicjalizować listę tak:
List<MojeDane> mojedane = new List<MojeDane> { new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } }, new MojeDane { nazwaFunkcji = "MyFunction2", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } } };
tylko ponazywaj to jakoś wszystko inaczej, nie iloscParametrowUsera, błagam.
Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:
new MojeDane{"MyFunction1",3,2,{3,4}}....
Chyba tu http://www.altcontroldelete.pl/artykuly/operacje-na-kolekcjach-w-c-/ mam odpowiedź.

- Rejestracja:około 9 lat
- Ostatnio:około 14 godzin
- Postów:5122
W sumie jest jedno rozwiązanie, ale jest ono wręcz unsafe
(nie keyword) i możliwe, że unpredictable, bo trudno powiedzieć co będzie robić w następnej wersji C#.
public static void Main(string[] args)
{
Foo(__arglist("test", 1, 2.5, 3, new int[]{1,2}));
}
static void Foo(__arglist)
{
ArgIterator iter = new ArgIterator(__arglist);
for (int n = iter.GetRemainingCount(); n > 0; n--)
{
var p = TypedReference.ToObject(iter.GetNextArg());
Console.WriteLine(p.GetType());
}
}
wynik:
System.String
System.Int32
System.Double
System.Int32
System.Int32[]
Lecz wrzucam to bardziej jako ciekawostkę niż realne rozwiązanie problemu, bo jest to coś, czego raczej nie chcesz w biznesie użyć.

- Rejestracja:około 17 lat
- Ostatnio:4 dni
- Lokalizacja:Wrocław
duzers napisał(a):
Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:
new MojeDane{"MyFunction1",3,2,{3,4}}....
To zdefiniuj sobie konstruktor, wtedy będziesz miał: lista.Add(new MojeDane("MyFunction1", 3, 2, { 3, 4 }));
.
- Rejestracja:prawie 12 lat
- Ostatnio:około rok
- Postów:55
somekind napisał(a):
duzers napisał(a):
Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:
new MojeDane{"MyFunction1",3,2,{3,4}}....
To zdefiniuj sobie konstruktor, wtedy będziesz miał:
lista.Add(new MojeDane("MyFunction1", 3, 2, { 3, 4 }));
.
Jest zrobione na wzór tego:
public class Person
{
public int PersonId { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public int[] Tablica{ get; private set; }
public Person(int nPersonId, string sFirstName, string sLastName, int[] nTablica)
{
PersonId = nPersonId;
FirstName = sFirstName;
LastName = sLastName;
Tablica= nTablica;
}
}
Tylko nie wiem jak z definicji pozbyć się **new int[] **
....
new Person(111, "Jacek","Placek", new int[] { 11, 22 }),
....
Chcę się tego pozbyć dla maksymalnego uproszczenia :)

- Rejestracja:ponad 21 lat
- Ostatnio:4 minuty
Albo nawet tak:
public class Person
{
public Person(int nPersonId, string sFirstName, string sLastName, params int[] nTablica)
{
;
}
}
public class PersonList : List<Person>
{
public void Add(int nPersonId, string sFirstName, string sLastName, params int[] nTablica)
{
Add(new Person(nPersonId, sFirstName, sLastName, nTablica));
}
}
List<Person> mojedane = new PersonList
{
{ 123, "Jan", "Kowalski", 1, 2, 3 },
{ 124, "Anna", "Nowak", 4, 5, 6, 7, 8 }
};