Вы можете использовать DOMParser
для разбора вашей строки с сущностями HTML на строку HTML, которая затем может быть визуализирована как элемент DOM.
document.getElementById("body").innerHTML = htmlDecode("<ul> \n <li>Place item in the <strong>Garbage Bin.</strong></li> \n</ul>");
function htmlDecode(input) {
var doc = new DOMParser().parseFromString(input, "text/html");
return doc.documentElement.textContent;
}
Вы можете использовать это так:
Хорошо, существует все еще определенный беспорядок здесь.
Вывод, на который это идет, ничего не имеет к с типом Объекта. SomeProperty, но все, чтобы сделать с типами выражений в инициализаторе массива. Другими словами, Вы могли сделать:
object o = new[] { "string1", "string2" };
и o все еще был бы ссылкой на массив строк.
В основном компилятор смотрит на выражение как это:
new[] { A, B, C, D, ... }
(где A, B, C, D и т.д. являются выражениями), и пытается разработать корректный тип массива для использования. Это только рассматривает типы A, B, C и D (и т.д.) как тип элемента массива. Беря этот набор типов кандидата, это пытается найти то, в которое все другие могут быть неявно преобразованы. Если не будет точно одного такого типа затем, то компилятор будет жаловаться.
Так, например:
new[] { new Form(), new MemoryStream() }
не скомпилирует - ни один MemoryStream
ни Form
конвертируемо к другому. Однако:
new[] { GetSomeIDisposable(), new MemoryStream() }
будет рассматриваться как IDisposable[]
потому что существует неявное преобразование из MemoryStream
кому: IDisposable
. Аналогично:
new[] { 0, 1, 3.5 } // double[]
new[] { 1, 3, 100L } // long[]
Это - просто синтаксический сахар. Компилятор выведет тип, на самом деле необходимый здесь, и создаст код, который эквивалентен явной конструкции:
Object.SomeProperty = new string[] {"string1", "string2"};
Нет такой вещи как new[]
это выполняется во времени выполнения.
Это примерно переводится в:
string[] $temp = new string[2];
$temp[0] = "string1";
$temp[1] = "string2";
Object.SomeProperty = $temp;
Интересно, var x = new[] { "string1", "string2" };
работы также, это может вывести x, чтобы быть a string[]
, но var x = { "string1", "string2" };
сбои.
Замены компилятора:
Object.SomeProperty = new[] {"string1", "string2"};
с:
Object.SomeProperty = new string[] {"string1", "string2"};
Я действительно надеюсь от Вашего ответа, Вы не запутываетесь между заменой типа и выводом типа здесь! Я принимаю тип Объекта. SomeProperty является строкой [], хотя должный для выстраивания ковариантности, это мог быть объект [] (обратите внимание, что это не было бы хорошей вещью - проверяют сообщение Eric Lippert на этот предмет!).
Компилятор выполняет вывод типа с помощью эвристики - это решает, что "string1" и "string2" имеют строку типа, и поэтому это эффективно заменяет код:-
Object.SomeProperty = new string[] {"string1", "string2"};
Это действительно настолько просто! Это все сделано во время компиляции, ничто во время выполнения.