Czy w C# da się zrobić coś takiego jak szablon funkcji
robię sobie klasę do walidacji i chcę miec tam taką funkcję, która zwraca wartość logiczną z porównania
czy to będzie int, double, datetime - czy da się zrobić to w C#?
Czy w C# da się zrobić coś takiego jak szablon funkcji
robię sobie klasę do walidacji i chcę miec tam taką funkcję, która zwraca wartość logiczną z porównania
czy to będzie int, double, datetime - czy da się zrobić to w C#?
typy ogólne/generyczne/parametryzowane (jak kto woli nazewnictwo). generics.
http://www.codeguru.pl/article-459.aspx na przykład.
dzięki za odpowiedź, ale jakoś sobie nie radzę
public bool porownaj<T>(T iVar, T iValPorownywana, int iTypPorownania)
{
switch (iTypPorownania)
{
case 1:
return iVar == iValPorownywana;
case 2:
return iVar > iValPorownywana;
case 3:
return iVar < iValPorownywana;
case 4:
return iVar >= iValPorownywana;
case 5:
return iVar <= iValPorownywana;
case 6:
return iVar != iValPorownywana;
default:
return false;
}
}
szablonu potrzebuję do powyższej funkcji, aby sobie porównać uint, int, date, double, co tam się da - ale przy kompilacja wywala mi błąd, że nie może porównać T z T (w sumie ma rację), ale jak temu zaradzić?
public static bool porownaj<T>(T iVar, T iValPorownywana, int iTypPorownania) where T : IComparable //zaznaczamy, że T ma implementować interfejs IComparable zawierający metodę CompareTo
{
switch (iTypPorownania)
{
case 1:
return iVar.CompareTo(iValPorownywana) == 0;
case 2:
return iVar.CompareTo(iValPorownywana) > 0;
case 3:
return iVar.CompareTo(iValPorownywana) < 0;
case 4:
return iVar.CompareTo(iValPorownywana) >= 0;
case 5:
return iVar.CompareTo(iValPorownywana) <= 0;
case 6:
return iVar.CompareTo(iValPorownywana) != 0;
default:
return false;
}
}
Poza tym funkcja jest bezsensowna deczko. Dlaczego chcesz związać typ porównania z liczbami 1 2 3 4 5 6 ? Nie przekombinowałeś przypadkiem ?