C# 将 Lambda 表达式函数转换为描述性字符串

2024-01-14

我有一个完全不必要的困境。我正在懒洋洋地寻找一个将 lamda 表达式转换为字符串的函数。让我烦恼的是,我每次都输入这个缓存键,但我真的不想花时间创建它。

我想将它用于我创建的缓存函数:

如果我想获取一个人的名字而不是每次都调用该函数,那么在哪里?

public static string GetPersonName(int id)
{
    return Repository.PersonProvider.Cached(x => x.GetById(id)).Name;
}

GetExpressionDescription 将返回“PersonProvider.GetById(int 10)”

我认为这是可能的,但我想知道是否有人已经构建了这个或在某处看到过它。

public static R Cached<T, R>(this T obj, Expression<Func<T, R>> function, double hours = 24)
{
    var expressionDescription = GetExpressionDescription(function); 
    return Cached(function, expressionDescription, hours); 
}

public static R Cached<T, R>(this T obj, Expression<Func<T, R>> function, string cacheName, double hours = 24)
{
    var context = HttpContext.Current;
    if (context == null)
        return function.Compile().Invoke(obj);

    R results = default(R);
    try { results = (R)context.Cache[cacheName]; }
    catch { }
    if (results == null)
    {
        results = function.Compile().Invoke(obj);
        if (results != null)
        {
            context.Cache.Add(cacheName, results, null, DateTime.Now.AddHours(hours),
                              Cache.NoSlidingExpiration,
                              CacheItemPriority.Default, null);
        }
    }
    return results;
}

您可以简单地获取一个字符串表示Expression<> with .ToString():

using System;
using System.Linq.Expressions;

public class Program
{
    public static void Main()
    {
        Test(s => s.StartsWith("A"));
    }

    static void Test(Expression<Func<string,bool>> expr)
    {
        Console.WriteLine(expr.ToString());
        Console.ReadKey();
    }
}

Prints:

s => s.StartsWith("A")

See: https://dotnetfiddle.net/CJwAE5 https://dotnetfiddle.net/CJwAE5

但当然它不会产生调用者和变量的值,而只会产生表达式本身。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 将 Lambda 表达式函数转换为描述性字符串 的相关文章

  • C# 方法重载决策不选择具体的泛型覆盖

    这个完整的 C 程序说明了这个问题 public abstract class Executor
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 将函数参数类型提取为参数包

    这是一个后续问题 解包 元组以调用匹配的函数指针 https stackoverflow com questions 7858817 unpacking a tuple to call a matching function pointer
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 无法将字符串文字分配给装箱的 std::string 向量

    这是我的类型系统的简化版本 include
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐

  • iOS6 - 如何清除主屏幕/独立Web应用程序的缓存?

    Apple 似乎改变了 iOS 6 中主屏幕 独立 Web 应用程序的工作方式 根据各种博客文章 example http blog nsbasic com p 928 这些应用程序现在拥有自己的专用空间来存储缓存文件 sqlite 数据库
  • 阿尔法 + RGB -> ARGB?

    在as3中 是否有实用程序或函数可以将RGB颜色 例如0xFF0000 和alpha值 例如0 5 转换为A 32位ARGB值 从 ARGB 到 RGB alpha 一些解释 位图数据可以在其构造函数中采用 ARGB 值 但在精灵中填充形状
  • 如何使用 Django URL 命名空间?

    我正在努力掌握窍门Django URL 命名空间 http docs djangoproject com en dev topics http urls defining url namespaces 但我找不到任何示例或文档 这是我尝试过
  • CloudKit - 完整且完整的错误处理示例

    Apple 非常清楚 他们在每个视频中都表示 处理错误的 CloudKit 应用程序和不处理错误的 CloudKit 应用程序之间的区别就是工作应用程序和不处理错误的应用程序之间的区别 但是 我无法在任何地方找到每个错误含义的正确列表 哪些
  • Tensorflow/keras:“logits和标签必须具有相同的第一维”如何​​压缩logits或扩展标签?

    我正在尝试制作一个简单的 CNN 分类器模型 对于我的训练图像 BATCH SIZEx227x227x1 和标签 BATCH SIZEx7 数据集 我使用 numpy ndarrays 它们通过批量输入到模型中ImageDataGenera
  • 为什么不能以发布模式建立网站?

    在 ASP Net 中 如果我设置Web应用程序我可以将其配置为释放模式但有一个website我只能将配置设置为调试模式 为什么是这样 在网站项目中 每个页面都是根据第一次请求动态编译的 除非您在配置文件中另有指定 否则它将在不调试符号的情
  • Node js 单元测试:模拟需要依赖

    我在为以下设置编写单元测试作为 jira js 文件 在 node js 模块中 时遇到问题 var rest require restler https www npmjs com package restler module expor
  • 将 pyno 与我现有的 python 安装一起使用

    我正在尝试使用 PyUNO 作为从 Django 服务器内将不同文档格式 doc wordperfect html 等 转换为 PDF 的方法 我很难受import uno上班 做的时候好像失败了import pyuno 带有一条消息Imp
  • 从 Drupal 站点内重定向到新页面

    我正在使用 Drupal 站点 我们想要设置一个重定向到外部站点的特殊 URL 换句话说 如果http www mysite com http www mysite com是我们的 Drupal 网站 我们想要http www mysite
  • 美元符号和/或破折号破坏 Razor 的解析器

    我试图呈现的最终结果
  • clojurescript:触摸事件和 Domina

    我无法从 Domina 的 touchstart 事件中获取 touch 或 changedTouches 列表 这是我的 require 东西 ns myproj require macros hiccups core as h requ
  • 如何显示小时范围

    我有一个数据库表 以 TIME 格式存储餐厅的营业时间作为时间范围 例如 如果餐厅的营业时间是 上午 9 点至下午 5 点 则会有 2 列 hours open 和 hours close 我将 9 00 存储在 hours open 中
  • 如何查看文本通道的权限值? [不和谐.py]

    我想检查文本通道是否已将权限设置为特定值 特别是发送信息允许 基本上我想要这样的东西 bot command async def perm ctx channel discord TextChannel None if send messa
  • 如何获取视图中的列级依赖关系

    我已经对这个问题进行了一些研究 但还没有解决方案 我想要得到的是视图中的列级依赖关系 所以 假设我们有一张这样的表 create table TEST first name varchar 10 last name varchar 10 s
  • 滚动时图像变化

    继另一个那么问题 https stackoverflow com questions 15861645 change image on scroll 该脚本更改页面滚动上的图像 然而 如果该脚本用于包含 200 多个图像的视频帧 则该脚本将
  • 配置 redis 以一致地首先逐出旧数据

    我在 redis 中存储了一堆实时数据 我将所有按键的 TTL 设置为 14400 秒 4 小时 我已将 maxmemory 设置为 10G 目前内存中的空间不足以容纳 4 小时的数据 而且我没有使用虚拟内存 因此 Redis 会在数据过期
  • 如何计算每个id的总和

    使用水晶报表7 我想查看表1和表2的总和 table1 id name 001 raja 002 vijay 003 suresh table2 id value 001 100 001 200 001 150 002 200 003 15
  • 使用画布(三.js)覆盖画布(WebGL)

    我有两块画布 第一个应该是背景 其内容通过原始 WebGL 3D 渲染 第二个画布应该覆盖第一个画布 并且主要是透明的 它的内容通过 Three js 3D 内容 呈现 不幸的是 第二个画布不是绘制在第一个画布的上面 而是绘制在它的旁边 如
  • 如何使用 swiftUI 创建平滑的颜色变化动画? (有问题的例子)

    I have a play pause button that changes when pressed At the moment it just fades in and out but I would like it to perfo
  • C# 将 Lambda 表达式函数转换为描述性字符串

    我有一个完全不必要的困境 我正在懒洋洋地寻找一个将 lamda 表达式转换为字符串的函数 让我烦恼的是 我每次都输入这个缓存键 但我真的不想花时间创建它 我想将它用于我创建的缓存函数 如果我想获取一个人的名字而不是每次都调用该函数 那么在哪