Тип значения в установщике - это тип свойства - вы не можете передать строку свойству, которое является int, это должно быть сначала проанализировано в int.
Строки в .net нельзя привести к какому-либо другому типу (так, как допускают perl, awk и многие другие динамические языки), их можно рассматривать только как строку или как объект родительского класса.
Вы можете сделать следующее:
private int _number;
private string _numberAsString;
public string NumberAsString
{
get { return _numberAsString; }
set { LinkedSet(value); }
}
public int Number
{
get { return _number; }
set { LinkedSet(value); }
}
private void LinkedSet(string s)
{
this._number = int.Parse(s);
this._numberAsString = s;
}
private void LinkedSet(int i)
{
this._numberAsString = i.ToString();
this._number = i;
}
очевидно, что установщик NumberAsString может выдать исключение FormatException, которое установщик Number не может.
Я не рекомендую это вообще, хотя, если вам действительно не нужно регулярно преобразовывать число в строку, а строку в число (в этот момент вы можете заставить сеттеры лениться в их оценка связанного значения - хотя и изменяющая семантику исключения от набора строк до получения int - может быть в лучшем случае раздражающей или в худшем случае неприятной ошибкой.