C # не может неявно преобразовать тип 'string' в 'string []' в операторе if else - PullRequest
0 голосов
/ 10 октября 2011

Я пытаюсь прочитать строку в массив, и я получаю сообщение об ошибке "Невозможно преобразовать тип 'строка' в 'строку []'.

Ошибка возникает здесь:

string[] sepText = result.Tables[0].Rows[0].Field<string>("WebHTML").UrlDecode();

Ниже приведено мое полное заявление if else:

if (!string.IsNullOrEmpty(result.Tables[0].Rows[0].Field<string>("WebHTML")))
            {
                string[] sepText = result.Tables[0].Rows[0].Field<string>("WebHTML").UrlDecode();
                NewsContent.Text = sepText[1];
                if (!string.IsNullOrEmpty(sepText[0]))
                    Image1.ImageUrl = sepText[0];
                else
                    Image1.Visible = false;
                NewsTitle.Text = String.Format("<a href=\"{0}/news/{1}/{2}.aspx\">{3}</a>", Extensions.GetServerName(true), result.Tables[0].Rows[0].Field<int>("News_Item_ID"), result.Tables[0].Rows[0].Field<string>("Title").UrlFormat(), result.Tables[0].Rows[0].Field<string>("Title"));
                Hyperlink1.NavigateUrl = String.Format("{0}/news/{1}/{2}.aspx", Extensions.GetServerName(true), result.Tables[0].Rows[0].Field<int>("News_Item_ID"), result.Tables[0].Rows[0].Field<string>("Title").UrlFormat());
            }
            else
            {
                Hyperlink1.Visible = false;
                Image1.Visible = false;
            }

Спасибо за помощь!

РЕДАКТИРОВАТЬ код для декодирования URL:

public static string UrlDecode(this string str)
{
    return System.Web.HttpUtility.UrlDecode(str);
}

Ответы [ 6 ]

3 голосов
/ 10 октября 2011

result.Tables[0].Rows[0].Field<string>("WebHTML") даст вам значение поля WebHTML в первой строке первой таблицы, которое представляет собой один string, а не string[].

. Вы можетеВы хотите показать свой код для UrlDecode(), поскольку он выглядит как пользовательская реализация, а не как одна из версий встроенного фреймворка.

Вы также объявляете метод UrlDecode, который принимает string какпараметр и вернуть string.Помните, что строка - это не то же самое, что массив строк.

1 голос
/ 10 октября 2011

Кажется, вы пытаетесь поставить:

result.Tables[0].Rows[0].Field<string>("WebHTML").UrlDecode();

, который возвращает строку в массив строк. Просто делайте вашу переменную sepText как строку, а не как строковый массив, и все будет хорошо, например

string sepText = result.Tables[0].Rows[0].Field<string>("WebHTML").UrlDecode();

Позже в вашем коде вам явно нужно будет прочитать содержимое строки следующим образом:

Image1.ImageUrl  =sepText;
0 голосов
/ 10 октября 2011

Это потому, что результатом этой строки является «строка», и вы пытаетесь присвоить ее массиву, поскольку UrlDecode не создает массив.Вероятно, вы хотели использовать метод split () для создания массива разделителей?

0 голосов
/ 10 октября 2011

Я не думаю, что URLDecode работает так, как вы думаете. Все, что делает URLDecode, это удаляет кодировку URL из строки. Он не возвращает массив строк - только декодированное значение строки, которую вы ему дали.

http://msdn.microsoft.com/en-us/library/system.web.httputility.urldecode.aspx

Пример. Ваш веб-браузер заменяет пробел на% 20. Это изменяет% 20 обратно на пробел.

0 голосов
/ 10 октября 2011

UrlDecode возвращает строку, и вы назначаете ее массиву.

Если вы хотите, чтобы детали вам понадобилось использовать строку для создания объекта Url.

Url url = new Url(result.Tables[0].Rows[0].Field<string>("WebHTML"));

изатем получите детали.

См .: Получите части URL без хоста

0 голосов
/ 10 октября 2011

Предполагая, что UrlDecode, который вы используете, равен здесь , тогда результатом будет string, а не string[]!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...