将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

达西斯

我有以下C#代码,该代码从lambda表达式获取成员名称:

public static class ObjectInformation<T>
{
    public static string GetPropertyName<TProp>(Expression<Func<T, TProp>> propertyLambda)
    {
        var memberExpression = propertyLambda.Body as MemberExpression;
        if (memberExpression == null)
        {
            throw new ArgumentException("Lambda must return a property.");
        }

        return memberExpression.Member.Name;
    }
}

public static class ObjectInformation
{
   public static string GetPropertyName<T>(Expression<Func<T>> propertyLambda)
    {
        var memberExpression = propertyLambda.Body as MemberExpression;
        if (memberExpression == null)
        {
            throw new ArgumentException("Lambda must return a property.");    
        }

        return memberExpression.Member.Name;
    }
}

我称这样的方法:

ObjectInformation<RemoteCollectionContentViewModel>.GetPropertyName(e => e.SomeProperty);
ObjectInformation.GetPropertyName(() => SomeProperty)

我希望第二种方法使用第一种方法(而不是重复代码),因此我需要转换Func<T>Func<T, TProp>我该如何实现?

影响

没有简单的方法可以转换表达式类型。您将不得不重建整个表达式树。这不值得麻烦。有一种提取常规逻辑的好方法:

public static class ObjectInformation
{
    public static string GetPropertyName<T, TProp> (Expression<Func<T, TProp>> propertyLambda)
    {
        return GetPropertyName((LambdaExpression)propertyLambda);
    }

    public static string GetPropertyName<T> (Expression<Func<T>> propertyLambda)
    {
        return GetPropertyName((LambdaExpression)propertyLambda);
    }

    private static string GetPropertyName (LambdaExpression propertyLambda)
    {
        var memberExpression = propertyLambda.Body as MemberExpression;
        if (memberExpression == null)
            throw new ArgumentException("Lambda must return a property.");
        return memberExpression.Member.Name;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

来自分类Dev

如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

来自分类Dev

将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

来自分类Dev

将MemberInfo反射到Func <T1,T2>

来自分类Dev

将Func <T,TProperty>转换为Expression <Func <T,Property >>

来自分类Dev

有没有办法将Func <T1,bool>映射到Func <T2,bool>?

来自分类Dev

无法理解如何编码Func <Func <T1,T2>,T3>

来自分类Dev

如何将PowerShell函数传递给采用Func <T1,T2>的.NET方法?

来自分类Dev

将Expression <Func <T,V >>转换为Expression <Func <T,Nullable <V >>>

来自分类Dev

如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

来自分类Dev

是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

来自分类Dev

将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

来自分类Dev

将表达式转换为Expression <Func <T,bool >>

来自分类Dev

如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

来自分类Dev

调用Func <T1,T2,T3>有哪些可选参数?

来自分类Dev

表达式<Func <T1,T2,TResult >>和Sql IN

来自分类Dev

我无法通过func <T1,T2>获得C#方法名称

来自分类Dev

如何将IQueryable <T>转换为Expression <Func <T,bool >>?

来自分类Dev

是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

来自分类Dev

方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

来自分类Dev

ConcurrentDictionary-将addValueFactory(Func <string,T,T>)转换为updateValueFactory(Func <string,T,T>)?

来自分类Dev

如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

来自分类Dev

正文Expression <Func <T,bool >>的复杂编辑

来自分类Dev

将谓词<T>转换为Func <T,bool>

来自分类Dev

如何将Func <T,object>转换为Func <Exception,object>

来自分类Dev

如何将Func <T,object>转换为Func <Exception,object>

来自分类Dev

将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

来自分类Dev

将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

来自分类Dev

将 Expression<Func<Tin, object>> 转换为 Expression<Func<Tin, Tout>>

Related 相关文章

  1. 1

    无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

  2. 2

    如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

  3. 3

    将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

  4. 4

    将MemberInfo反射到Func <T1,T2>

  5. 5

    将Func <T,TProperty>转换为Expression <Func <T,Property >>

  6. 6

    有没有办法将Func <T1,bool>映射到Func <T2,bool>?

  7. 7

    无法理解如何编码Func <Func <T1,T2>,T3>

  8. 8

    如何将PowerShell函数传递给采用Func <T1,T2>的.NET方法?

  9. 9

    将Expression <Func <T,V >>转换为Expression <Func <T,Nullable <V >>>

  10. 10

    如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

  11. 11

    是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

  12. 12

    将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

  13. 13

    将表达式转换为Expression <Func <T,bool >>

  14. 14

    如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

  15. 15

    调用Func <T1,T2,T3>有哪些可选参数?

  16. 16

    表达式<Func <T1,T2,TResult >>和Sql IN

  17. 17

    我无法通过func <T1,T2>获得C#方法名称

  18. 18

    如何将IQueryable <T>转换为Expression <Func <T,bool >>?

  19. 19

    是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

  20. 20

    方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

  21. 21

    ConcurrentDictionary-将addValueFactory(Func <string,T,T>)转换为updateValueFactory(Func <string,T,T>)?

  22. 22

    如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

  23. 23

    正文Expression <Func <T,bool >>的复杂编辑

  24. 24

    将谓词<T>转换为Func <T,bool>

  25. 25

    如何将Func <T,object>转换为Func <Exception,object>

  26. 26

    如何将Func <T,object>转换为Func <Exception,object>

  27. 27

    将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

  28. 28

    将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

  29. 29

    将 Expression<Func<Tin, object>> 转换为 Expression<Func<Tin, Tout>>

热门标签

归档