Я могу получить определенные метаданные от Func <T, объект>?

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

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

7
задан Jason Bunting 24 February 2009 в 00:15
поделиться

4 ответа

Это - версия, которую я использую, она возвращает a PropertyInfo, но завоевывание репутацию тривиально.

public static PropertyInfo GetProperty<T>(Expression<Func<T, object>> expression)  
{
    MemberExpression memberExpression = null;

    if (expression.Body.NodeType == ExpressionType.Convert)
    {
        memberExpression = ((UnaryExpression) expression.Body).Operand as MemberExpression;
    }
    else if (expression.Body.NodeType == ExpressionType.MemberAccess)
    {
        memberExpression = expression.Body as MemberExpression;
    }

    if (memberExpression == null)
    {
        throw new ArgumentException("Not a member access", "expression");
    }

    return memberExpression.Member as PropertyInfo;
}
12
ответ дан 6 December 2019 в 07:52
поделиться

Что-то вроде этого должно добиться цели:

public static string GetPropertyName<T>(this IList<T> list, Expression<Func<T, object>> expr) {
  MemberExpression member_expression = expr.Body as MemberExpression;
  if (member_expression == null)
      throw new ArgumentNullException("member_expression");
  MemberInfo member = member_expression.Member;
  PropertyInfo property = member as PropertyInfo;
  string proname = memeber.name;
}

ПРЕДУПРЕЖДЕНИЕ: воздушный кодекс!

3
ответ дан 6 December 2019 в 07:52
поделиться

вот очень простой и быстрый способ сделать это в этом блоге: http://blog.bittercoder.com/PermaLink,guid, 206e64d1-29ae-4362-874b-83f5b103727f.aspx

Итак, дано:

Func func = Name => "Значение";

Вы можете получить параметр лямбда «Имя» от делегата функции от призвание:

func.Method.GetParameters () [0] .Name (вернет "Name")

Вот исправленный метод Hash из Андрей:

public Dictionary<string, T> Hash<T>(params Func<string, T>[] args)
where T : class
{
    var items = new Dictionary<string, T>();
    foreach (var func in args)
    {
        var item = func(null);
        items.Add(func.Method.GetParameters()[0].Name, item);
    }
    return items;
}

Надеюсь, поможет, Патрик

6
ответ дан 6 December 2019 в 07:52
поделиться

Небольшое примечание: func.Method.GetParameters () [0] .Name is чрезвычайно быстро по сравнению с компиляцией лямбда-выражения и извлечением выражения члена, затем информации о члене, затем имени.

2
ответ дан 6 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

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