Подобный код будет (и должен) не компилироваться. Если вы хотите переопределить это поведение, вы можете создать неявное преобразование в логическое значение. Примерно так:
public class Foo {
public static implicit operator bool(Foo me) {
if (me == null) {
return false;
}
return true; // maybe add more logic before saying True
}
}
Я бы назвал это плохой практикой, потому что для программиста, не знакомого с вашим проектом, не сразу понятно, какая логика обеспечивает логическое преобразование. Более идиоматический способ сделать это - явно рассказать читателю, что делает ваш код, как это делает встроенный класс String, с помощью статической вспомогательной функции:
if (String.IsNullOrEmpty(str){
// ...
}
Код пишется только один раз, и читаю часто; оптимизировать для удобства чтения.
Уверен, твой код можно написать так:
public int compareTo(Emp other)
{
return this.getName().compareTo(other.getName());
}
Вам не нужно разыгрывать i в Emp, это уже Emp:
public int compareTo(Emp i) {
return getName().compareTo(i.getName());
}