Кастинг не предполагает никакого преобразования, т. е. внутреннее представление значения не изменяется. Пример:
object o = "Hello"; // o is typed as object and contains a string.
string s = (string)o; // This works only if o really contains a string or null.
Вы можете преобразовать double
в string
, как это
double d = 5;
string s = d.ToString(); // -> "5"
// Or by specifying a format
string formatted = d.ToString("N2"); // -> "5.00"
Вы можете преобразовать string
в double
несколькими способами (здесь только два из них):
string s = "5";
double d = Double.Parse(s); // Throws an exception if s does not contain a valid number
Или безопасный способ
string s = "5";
double d;
if (Double.TryParse(s, out d)) {
Console.WriteLine("OK. Result = {0}", d);
} else {
Console.WriteLine("oops!");
}
Вы можете использовать командную строку для этого. В Linux используйте sed.
sed -i 's/\.png/\.png alt=* title=*/g'
Здесь выполняется поиск по .png
и замена на .png alt=* title=*
. Вы должны использовать обратную косую черту перед. потому что это особый характер.
Вы можете заменить результаты на части совпадения, используя подспаривания. Например, скажем, у вас есть следующий html:
<img src="foo_one.png" />
<img src="bar_two.png" />
Вы можете выполнить эту команду:
:%s/"\(.\{-}\)\.png"/"\1.png" title="\1" alt="\1"/g
.\{-}
будет соответствовать «любому количеству символов перед .png
«без жадности» ( :help /\{
) и скобки вокруг него \(
и \)
помечают его как захваченную группу, которая затем будет использоваться в замене как \1
( первая захваченная группа). Выполнение этого дает вам:
<img src="foo_one.png" title="foo_one" alt="foo_one" />
<img src="bar_two.png" title="bar_two" alt="bar_two" />
Теперь, если вам нужна более сложная подстановка, например, превращение имени файла в удобочитаемую строку, вы можете использовать флаг подстановки \=
, чтобы заменить строку любой выражение, как вызов функции. Например, вот что мы могли бы запустить в приведенном выше тексте:
:%s/title="\zs\(.\{-}\)\ze"/\=lib#CamelCase(submatch(1))/g
При этом используются два специфических для Vim паттерна: \zs
и \ze
. Это «начало матча» и «конец матча». Вещи, которые будут искать, это весь паттерн, title=...
. Однако, что будет заменено только между \zs
и \ze
. Это облегчает использование результата lib#CamelCase
в качестве прямой замены.
Обратите внимание, что в этот раз вам не нужны скобки \(
/ \)
, потому что вы можете просто использовать submatch(0)
для «полного соответствия»:
%s/title="\zs.\{-}\ze"/\=lib#CamelCase(submatch(0))/g
Функция [ 1122] - это моя собственная функция, которая реализована следующим образом:
function! lib#CamelCase(word)
return substitute(a:word, '_\(.\)', '\U\1', 'g')
endfunction
Вы можете написать любую функцию, которая принимает некоторые данные и возвращает строку замены, делая все, что вам нужно.
Я не уверен, какой у вас уровень опыта работы с Vim и регулярными выражениями, поэтому сложно дать конкретный совет, а замены Vim - большая тема. Я могу порекомендовать вам прочитать эти разделы справки: