Я был в очень похожей ситуации, как вы описали: мне нужно было увеличить текст (точно содержащий числовое значение) в текстовом поле Windows Forms.
Я понимаю ваши потребности, как вы описали
somestring ++;// я действительно знаю, что эта строка содержит числовое значение
Моя душа похожа на ту, которая, как я считаю, близка вашему описанию
somestring = (incrementaltable) somestring+ 1
Все, что мне нужно было сделать, это
- создать класс с именем
incrementable
- , определив в нем явный оператор (чтобы помочь преобразованию
string
to incrementable
) - определение неявного оператора в нем (чтобы помочь преобразованию
incrementable
обратно в string
) - оператора для
+
(знак плюс)
Вот как выглядит мой класс полностью
public class incrementable
{
public string s; // For storing string value that holds the number
public incrementable(string _s)
{
s = _s;
}
public static explicit operator incrementable(string tmp)
{
return new incrementable(tmp);
}
public static implicit operator string(incrementable tmp)
{
return tmp.s;
}
public static incrementable operator +(incrementable str, int inc) // This will work flawlessly like `somestring = (incrementable)somestring + 1`
=> new incrementable((Convert.ToInt32(str.s) + inc).ToString());
public static incrementable operator ++(incrementable str) // Unfortunately won't work, see below
=> new incrementable((Convert.ToInt32(str.s) + 1).ToString());
}
К сожалению, мне просто не удалось улучшить свой класс с помощью унарного оператора ++
.Причина против использования неявного преобразования, такого как ((incrementable)somestring)++
, заключается в том, что оно приведет к ошибке, говорящей The operand of an increment or decrement operator must be a variable, property or indexer
, следовательно, не может быть результатом этого преобразования.
В любом случае, надеюсь, это поможет!