Jeśli to wyglądało tak:
public Curve(int degree, Point3D[] points)
{
...
}
public Curve(int degree, IList<Point3D> points)
{
...
}
niż można użyć: (tak długo, jak potrzebujesz tylko iterować na collec nia dla swoich zawartych Point3D
s)
public Curve(int degree, IEnumerable<Point3D> points)
{
...
}
Jednakże, ponieważ chcesz mieć params
konstruktora, że to niemożliwe do zrobienia, ponieważ nie będzie w stanie wywołać konstruktora tak:
Curve curve = new Curve(30, p1, p2, p3);
Ale tylko tak:
Curve curve = new Curve(30, new Point3D[] {p1, p2, p3});
Państwo może ponownie wykorzystać swój kod za pomocą:
public Curve(int degree, params Point3D[] points)
{
...
}
public Curve(int degree, IList<Point3D> points) : this(degree, points.ToArray()) { }
lub na odwrót:
public Curve(int degree, IList<Point3D> points)
{
...
}
public Curve(int degree, params Point3D[] points) : this(degree, points as IList<Point3D>) { }
które zainicjować instancję za pomocą konstruktora params
ten sam sposób, w jaki wykorzystuje jedną List
.
P.S .: Czasami warto rozważyć zmianę IList
do IEnumerable
i tak, aby umożliwić użytkownikowi z tej klasy, aby go użyć bardziej abstrakcyjnie.
Wymień pierwszy telefon na drugi. –
Nie można ich scalić, jeśli chcesz obsługiwać funkcję 'params' (używając pojedynczych wartości). Każdy 'Point3D []' jest 'IList' ale nie każdy 'IList ' jest tablicą. Tak więc możesz pozwolić konstruktorowi 'params' wywołać konstruktor' IList': 'ten (stopień, (IList ) punkty)' –