public int ConvertRomanToInt(string s, Predicate <int> output_limitation) { Dictionary <char, int> roman_numbers = GetRomanNumbers(); int result_value = 0; int current_value = 0; int next_value = 0; for (int i = 0; i < s.Length; i++) { current_value = roman_numbers[s[i]]; next_value = (i < s.Length - 1) ? roman_numbers[s[i + 1]] : 0; result_value += (current_value >= next_value) ? current_value : -current_value; if (output_limitation?.Invoke(result_value) ?? false) { messanger?.ShowWarning("output is limited"); return(result_value); } } return(result_value); }