Как бросить Универсальные Списки динамично в C#?

Для решения первой проблемы ботов, хлопающих первой полосой, попытайтесь делать ловушку точно тем же как реальный мешок дерьма. Заставьте разметку HTML для первой полосы включать ту же разметку, как будто это было для мешка дерьма, но делает это скрытым. Это вынудило бы ботов включать механизмы CSS, чтобы определить, отображен ли мешок загаженного кода или скрыт. С другой стороны, Вы могли только произвести этот 'поддельный' мешок загаженного HTML случайное количество времени (часы?), прежде чем реальный мешок дерьма повышается. Это заставило бы ботов поднять тревогу слишком скоро (но не знать как скоро).

Для покрытия второго шага того, чтобы на самом деле покупать мешок дерьма добавьте простые вопросы. Я предпочитаю вопросы о здравом смысле вопросам о математике, предложенным выше. Вещи как, "Лед является горячим или холодным?" "Муравьи являются большими или маленькими"? Конечно, их должны были бы рандомизировать и вытянуть от бесконечного предоставления вопросов, еще боты могли быть запрограммированы для ответа на них. Этими вопросами, тем не менее, является все еще намного меньше раздражения, чем КАПЧИ.

9
задан user7116 21 August 2009 в 20:59
поделиться

5 ответов

Если вы можете использовать LINQ, тогда метод Cast сделает то, что вам нужно:

List<string> listString = listObject.Cast<string>().ToList();

Вы также можете использовать метод ConvertAll , как Стэн указывает в своем ответе:

List<string> listString = listObject.ConvertAll(x => (string)x);

Если вы Если вы не используете C # 3, вам нужно будет использовать "старый" синтаксис делегата вместо лямбда:

List<string> listString =
    listObject.ConvertAll(delegate(object x) { return (string)x; });
18
ответ дан 4 December 2019 в 10:05
поделиться

Если вы используете .NET 3.5, вы можете использовать, таким образом вам не нужно делать лишний ToList (). Вы также можете предоставить свой собственный конвертер, если вам нужно преобразовать расширенные объекты.

 List<string> listString = listObject.ConvertAll(x=> x as String);

Если вы не можете использовать LINQ, вы можете сделать это

foreach(object item in listObject)
{
  string convertedItem = item as String;
  if(convertedItem != null)
       listString.Add(convertedItem);
}
4
ответ дан 4 December 2019 в 10:05
поделиться

Как насчет этого:

public static List<T> ConvertToGenericList<T>(IList listOfObjects)
{
    List<T> items = new List<T>();

    for (int i = 0; i < listOfObjects.Count; i++)
    {
        items.Add((T)listOfObjects[i]);
    }
     return items;
}

Использование:

List<object> listObject = new List<object>();
listObject.Add("ITEM 1");
listObject.Add("ITEM 2");
listObject.Add("ITEM 3");
List<string> listString = Converter.ConvertToGenericList<string>(listObject);
1
ответ дан 4 December 2019 в 10:05
поделиться

Я не думаю, что вы можете сделать это за один шаг. Вместо этого попробуйте что-нибудь вроде этого:

        List<object> listObject = new List<object>();
        listObject.Add( "ITEM 1" );
        listObject.Add( "ITEM 2" );
        listObject.Add( "ITEM 3" );

        List<string> lstStr = new List<string>( listObject.Count );

        foreach ( object obj in listObject )
        {
            lstStr.Add( obj.ToString() );
        }
0
ответ дан 4 December 2019 в 10:05
поделиться
List<string> listString = (from o in listObject select (string)o).ToList();
0
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

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