Это XOR, и его действительно легко эмулировать.
Просто подумайте об этом:
Оба не могут быть истинными, оба не могут быть ложными.Нужно быть правдивым, нужно быть ложным.
Итак, мы приходим к следующему:
if(string.IsNullOrEmpty(input.A) == string.IsNullOrEmpty(input.B)) {
throw new ArgumentException("Exactly one A *OR* B is required.");
}
Если оба равны, они либо оба истинны, либо оба ложны.И оба случая недействительны.
И все это без какого-либо специального оператора XOR, которого у языка выбора может не быть.;)