C# Используя новый []

Вы можете использовать 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;
}

Вы можете использовать это так:

Кредит это [ 114] ответ для DOMParser.

7
задан Konrad Rudolph 28 November 2008 в 08:25
поделиться

5 ответов

Хорошо, существует все еще определенный беспорядок здесь.

Вывод, на который это идет, ничего не имеет к с типом Объекта. 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[]
16
ответ дан 6 December 2019 в 05:08
поделиться

Это - просто синтаксический сахар. Компилятор выведет тип, на самом деле необходимый здесь, и создаст код, который эквивалентен явной конструкции:

Object.SomeProperty = new string[] {"string1", "string2"};

Нет такой вещи как new[] это выполняется во времени выполнения.

15
ответ дан 6 December 2019 в 05:08
поделиться

Это примерно переводится в:

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" }; сбои.

4
ответ дан 6 December 2019 в 05:08
поделиться

Замены компилятора:

Object.SomeProperty = new[] {"string1", "string2"};

с:

Object.SomeProperty = new string[] {"string1", "string2"};
2
ответ дан 6 December 2019 в 05:08
поделиться

Я действительно надеюсь от Вашего ответа, Вы не запутываетесь между заменой типа и выводом типа здесь! Я принимаю тип Объекта. SomeProperty является строкой [], хотя должный для выстраивания ковариантности, это мог быть объект [] (обратите внимание, что это не было бы хорошей вещью - проверяют сообщение Eric Lippert на этот предмет!).

Компилятор выполняет вывод типа с помощью эвристики - это решает, что "string1" и "string2" имеют строку типа, и поэтому это эффективно заменяет код:-

Object.SomeProperty = new string[] {"string1", "string2"};

Это действительно настолько просто! Это все сделано во время компиляции, ничто во время выполнения.

1
ответ дан 6 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: