Этот код действительно работает? Разве это не должно читаться?
int lastDot = ipString->LastIndexOf('.') + 1;
Вам не нужно указывать длину для Substring, если вы хотите, чтобы все, что осталось в строке, поэтому вы можете сократить его до:
String^ ipString = "192.168.1.150";
int lastSection = int::Parse(ipString->Substring(ipString->LastIndexOf('.') + 1) ;
Хотя не так уж и много улучшений, но я сомневаюсь, что вы можете сделать намного лучше.