Вы всегда можете просто указать параметр типа object, это то, что делает компилятор. Когда вы вводите параметр dynamic, это просто означает, что в этом методе используется только динамический вызов для всех применений param, но снаружи это просто сигнатура объекта типа. Более динамичное использование вашего dynamicObject состояло бы в том, чтобы иметь перегрузки метода, который вы вызываете, поэтому, если вы оставите свой пример таким же и просто имеете две перегрузки, он вызовет один из двух методов, основанных на типе времени выполнения, и вы всегда добавить больше для большего количества типов.
public void Main() {
dynamic dynamicObject = 33;
if(true) { // Arbitrary logic
dynamicObject = null;
}
Method(dynamicObject);
}
public void Method(int param) {
//don't have to check check null
//only called if dynamicObject is an int
}
public void Method(object param) {
// will be called if dynamicObject is not an int or null
}