Создайте список & lt; Key & gt; [Дубликат]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

4
задан shanish 28 June 2012 в 08:49
поделиться

5 ответов

Вы можете использовать это, чтобы получить все индивидуальные значения перечисления:

private List<USERTYPE> userTypes = Enum.GetValues(typeof(USERTYPE)).Cast<USERTYPE>().ToList();

Если вы делаете такие вещи чаще, вы можете создать для него общий метод утилиты:

public static T[] GetEnumValues<T>() where T : struct {
    if (!typeof(T).IsEnum) {
        throw new ArgumentException("GetValues<T> can only be called for types derived from System.Enum", "T");
    }
    return (T[])Enum.GetValues(typeof(T));
}
13
ответ дан Botz3000 5 September 2018 в 11:09
поделиться

GetValues возвращает System.Array, но мы знаем, что это действительно TEnum[] (это одномерный массив, индексированный с нуля), где TEnum - USERTYPE в вашем случае. Поэтому используйте:

var allUsertypeValues = (USERTYPE[])Enum.GetValues(typeof(USERTYPE));
4
ответ дан Jeppe Stig Nielsen 5 September 2018 в 11:09
поделиться

UserTypeCan, попробуйте с этим,

 UserType = Enum.GetValues(typeof(USERTYPE)).OfType<USERTYPE>().ToList();
2
ответ дан Md. Rashim Uddin 5 September 2018 в 11:09
поделиться

То, что у вас есть, это в основном список перечислений. Отдельные элементы внутри этого перечисления.

Чтобы получить список значений перечисления, вы можете сделать

string[] str = Enum.GetNames(typeof(USERTYPE));

Использовать в get / set строку возврата [] вместо List & lt;>

public string[] UserType
{
    get 
    {
        return Enum.GetNames(typeof(USERTYPE));
    }
}

Я думаю, что набор не будет работать здесь, потому что вы не можете добавлять значения в перечисление во время выполнения.

2
ответ дан Nikhil Agrawal 5 September 2018 в 11:09
поделиться

Если вы хотите получить конкретное значение перечисления из списка user.UserType, сначала вам нужно указать значение Add enum для этого списка:

var user = new User();
//1 value - PERMANENT
user.UserType.Add(USERTYPE.Permanent);

Но если вам нужно всего лишь получить все возможные значения из произвольного enum, тогда вы можете попробовать Enum.GetValues

//2 values - Permanant and Temporary
var enums = Enum.GetValues(typeof(USERTYPE));
2
ответ дан oleksii 5 September 2018 в 11:09
поделиться
Другие вопросы по тегам:

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