将强类型属性名称作为参数传递

2023-11-29

我有一个收藏IEnumerable<School>正在传递给扩展 填充的方法DropDownList。我也想通过DataValueField and DataTextField作为一个论据,但我希望它们是 强类型。

基本上,我不想通过string为了DataValueField and DataTextField争论,很容易出错。

public static void populateDropDownList<T>(this DropDownList source,
        IEnumerable<T> dataSource,
        Func<T, string> dataValueField,
        Func<T, string> dataTextField) {
    source.DataValueField = dataValueField; //<-- this is wrong
    source.DataTextField = dataTextField; //<-- this is wrong
    source.DataSource = dataSource;
    source.DataBind();
}

就这样称呼...

myDropDownList.populateDropDownList(states,
        school => school.stateCode,
        school => school.stateName);

我的问题是,我怎样才能通过DataValueField and DataTextField强类型作为填充下拉列表的参数?


根据乔恩的回答和this帖子,它给了我一个想法。我通过了DataValueField and DataTextField as Expression<Func<TObject, TProperty>>到我的扩展方法。我创建了一个接受该表达式并返回的方法MemberInfo对于该财产。那么我所要做的就是打电话.Name我有我的string.

哦,我将扩展方法名称更改为populate,很丑。

public static void populate<TObject, TProperty>(
        this DropDownList source, 
        IEnumerable<TObject> dataSource, 
        Expression<Func<TObject, TProperty>> dataValueField, 
        Expression<Func<TObject, TProperty>> dataTextField) {
    source.DataValueField = getMemberInfo(dataValueField).Name;
    source.DataTextField = getMemberInfo(dataTextField).Name;
    source.DataSource = dataSource;
    source.DataBind();
}

private static MemberInfo getMemberInfo<TObject, TProperty>(Expression<Func<TObject, TProperty>> expression) {
    var member = expression.Body as MemberExpression;
    if(member != null) {
        return member.Member;
    }
    throw new ArgumentException("Member does not exist.");
}

就这样称呼...

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

将强类型属性名称作为参数传递 的相关文章

  • 将 ARGB 拆分为字节值

    我有一个 ARGB 值存储为 int 类型 它是通过调用 ToArgb 来存储的 我现在想要来自 int 值的各个颜色通道的字节值 例如 int mycolor 16744448 byte r g b a GetBytesFromColor
  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • 析构函数与成员函数竞赛

    当我在析构函数内时 其他线程是否可能开始执行对象的成员函数 遇到这种情况该如何处理呢 C 没有内在的保护来防止在删除对象后使用它 忘记竞争条件 另一个线程可以在完全删除你的对象后使用你的对象 Either 确保只有一个位置 代码拥有该对象
  • 用 OpenCL C 编写快速线性系统求解器

    我正在编写一个 OpenCL 内核 它将涉及求解线性系统 目前我的内核太慢了 提高线性系统部分的性能似乎是一个不错的起点 我还应该注意 我并没有尝试使我的线性求解器并行 我正在研究的问题在宏观层面上已经是令人尴尬的并行 以下是我编写的 C
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • C++ 模板参数数量错误(2,应该是 1)

    我使用 C 并行快速排序程序进行了测试 如下所示 首先使用列表作为容器 然后我转移到通用容器类型 但它报告了标题错误 可以帮忙解决这个问题吗 include
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 从 AuthorizeAttribute 继承的属性不起作用

    我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性 目标是防止用户在没有特定角色 或更高角色 的情况下访问某些控制器或控制器方法 根据到目前为止我所读到的问题 我创建了一个继承 AuthorizeAttribute
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 从数据库配置中的连接字符串中删除 SSIS 密码

    我有一个 SSIS 包 它使用 SQL 服务器中的 SSIS 配置表来检索 OLE DB 连接管理器的连接字符串属性 问题是我还需要相同的连接字符串来调用使用实体框架的程序集 我尝试访问连接管理器连接字符串属性 但 SSIS 总是删除密码
  • 为什么 INT64_MIN 的定义不同?为什么他们的行为不同?

    The stdint h我公司的标题是 define INT64 MIN 9223372036854775808LL 但在我项目的一些代码中 一位程序员写道 undef INT64 MIN define INT64 MIN 92233720

随机推荐

  • -webkit-backdrop-filter 在 Safari 上不起作用

    Safari 14 1 2 不显示 webkit backdrop filter blur 10px 我尝试过多个版本 内联 使用 jQuery 使用 supports但没有任何作用 最奇怪的是 它在 Safari 的 Web Inspec
  • Android 手机方向概述(包括指南针)

    一段时间以来 我一直在尝试了解 Android 方向传感器 我以为我明白了 然后我意识到我没有 现在我想 希望 我对它有了更好的感觉 但我仍然没有100 我将尝试解释我对它的不完整的理解 如果我有部分错误或填补任何空白 希望人们能够纠正我
  • 使用 PowerShell 打开文件

    是否有命令可以从 Visual Studio 中的包管理器控制台 也称为 PowerShell 打开项目项 例如类文件 当我在解决方案资源管理器中双击该文件时 也会发生同样的情况 我尝试使用Invoke Item但这恰好打开了 Visual
  • 将轴名称添加到图表中 C#

    我正在与winforms使用 C 我使用图表 我想在代码中设置 X 轴和 Y 轴的标题 我试过 chart1 chartarea 0 axisX title xxx 但它不起作用 我不知道为什么 我正在使用网络上的图表控件 并通过以下方式设
  • 为什么Oracle监听器和数据库服务没有运行?

    我刚刚开始接触 Red Hat Linux 7 2 和 Oracle 12c 因此 我上周末致力于尝试看看是否可以在 RHEL 7 2 上支持 Oracle 12c 最后 是的 我能够在 RHEL 7 2 VM 上运行 Oracle 但并非
  • 如何使用nodejs获取mongodb单个文档的大小(以字节为单位)?

    我正在使用 db coll findOne 获取文档 我想使用仅具有 mongo 本地驱动程序的 NodeJS 获取文档的大小 以字节为单位 这可能吗 可以使用BSON 这是 mongodb 驱动程序的依赖项 var bson requir
  • 在 Os.Rename 中强制覆盖

    如果另一个文件已经存在 是否可以强制重命名 os rename 来覆盖另一个文件 例如 在下面的代码中 如果文件 Tests csv 已存在 它将被 Tests txt 文件替换 也已重命名为 Tests csv os rename C U
  • 如何将数组列表放入列表框中

    因此 我在一项作业上需要帮助 并且我已经尝试解决它一个多星期了 但我需要帮助将数组列表放入列表框中 That s what the GUI should look like in the end all the information ha
  • 从 Swing GUI 编译并运行 Java 代码

    我正在用 Java Swing 构建一个 GUI 并且必须从中执行 Java 代码 为了测试简单的代码 比如用 Java 打印 HelloWorld 就可以了 我看过论坛问题 我只知道我必须调用操作系统 我使用的是Windows7 来执行该
  • 初始化网格时,同一 DataGridView 列中的控件不呈现

    好坏 我在 DataGridView 列中托管不同的控件 当我在初始化网格的同时添加控件时 控件显示为文本框 不好 如果我在 DataGridView 初始化后添加控件 控件会正确呈现 好 public Form1 InitializeCo
  • jQuery 在 for 循环中动态增加变量名称

    是否可以将 i 添加到 for 循环内的 var 中 如果语法错误 它看起来像下面的代码 for i 1 i lt countProjects i var test i otherVar something Thanks 为此最好使用数组
  • 反射 - 获取 lambda 表达式内的方法调用列表

    我正在尝试找到一种方法来获取 C 3 5 中 lambda 表达式内的方法调用列表 例如 在下面的代码中 我想使用方法 LookAtThis Action a 来分析 lambda 表达式的内容 换句话说 我希望 LookAtThis 返回
  • 如何使用散景后端控制全息视图中的(活动)工具

    如何控制在某个环境中使用 激活哪些工具holoviews情节与bokeh后端 我见过这个答案 但仅此而已adds一个新的活跃工具 它不会阻止任何其他工具 例如平移 处于活动状态 对于一个具体的例子 假设我只想要悬停工具 我会尝试这样做 im
  • 项目的选择器不是另一个项目的后代

    给定下面的 HTML 您将如何选择所有不是 itemcontainer 后代的 name s 类似于 group header name not 源自 itemcontainer 我知道这可以通过 jQuery 或添加其他类很容易地完成 但
  • cv2.getOptimalNewCameraMatrix 在某些数据集上返回 [0,0,0,0] 的 ROI

    我正在使用 OpenCV 2 x 开发一个 Python 程序 下面是我的代码摘录 该代码在已捕获和保存的文件列表上运行 所有图像都是80 x 60 8 位灰度图像 我得到的最好的投资回报率是 1 6 73 49 对于一台相机 但我的另一台
  • 在Java中将base64字符串转换为图像

    我有一个通过 JSON 字符串发送给我的图像 我想在我的 Android 应用程序中将该字符串转换为图像 然后显示该图像 JSON 字符串如下所示 data image png base64 iVBORw0KGgoAAAANSUhEUgAA
  • WinAPI C++ 客户端在读取之前检测匿名管道上的写入

    我正在编写一个 C Windows 客户端控制台应用程序 该应用程序从 STDIN 上的匿名管道读取数据 我希望能够按如下方式使用我的程序 echo input text here my app exe 并在应用程序中使用通过管道输入的文本
  • 为什么我的 JLabel 没有显示

    我正在调用此方法 称为检查我的抽象类之一 但由于某种原因 我添加到 JPanel 面板 的 JLabel 问题 没有显示 为什么会出现这种情况 任何解释 我都使用重绘和验证方法 但仍然没有显示任何内容 您遇到的问题是您阻塞了事件调度线程 阻
  • 了解 Java 中的一个大公司项目 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 理解java大公司项目的最好方法是什么 关于这个主题 有一个不错的播客 采访 Dave Thomas 务实的程序员 Dave here 他称之为 软件考古学 由于许多不同的原因 组织经常失
  • 将强类型属性名称作为参数传递

    我有一个收藏IEnumerable