Учитывая
class Either<A, B> {
public Either(A x) {}
public Either(B x) {}
}
Как устранить неоднозначность между двумя конструкторами, когда два параметра типа одинаковы?
Например, эта строка:
var e = new Either<string, string>("");
Сбой:
Вызов неоднозначен между следующими методами или свойствами: "Программа. Или. (A)" и "Program.Either.Either(B)"
Я знаю, что если бы я дал параметрам разные имена (например, A a
и B b
вместо просто x
), я мог бы использовать именованные параметры для устранения неоднозначности (например, new Either<string, string>(a: "")
). Но мне интересно узнать, как решить эту проблему, не изменяя определения Either
.
Edit:
Вы можете написать пару интеллектуальных конструкторов, но мне интересно узнать, можно ли конструкторы Either
вызывать напрямую без двусмысленности. (Или если есть другие "трюки" помимо этого).
static Either<A, B> Left<A, B>(A x) {
return new Either<A, B>(x);
}
static Either<A, B> Right<A, B>(B x) {
return new Either<A, B>(x);
}
var e1 = Left<string, string>("");
var e2 = Right<string, string>("");