c# - 如何提供要在函数中使用的字段?

标签 c# .net lambda

Linq 的 OrderBy 之类的东西,您可以在其中指定应该用来进行排序的键。

具体来说,在我的例子中,我有一个具有两个 bool 属性的等效结构,一个 .IsNice 和另一个 .IsPretty;然后,我希望能够执行一个函数,返回一个实例是漂亮还是不错。

我可以做两个函数,

    bool itIsPretty (ExampleStruct toVerify);
    bool itIsNice (ExampleStruct toVerify);

但是,两者本质上是一样的!两者无非都是返回Verify.(IsPretty/IsNice),不想有复制粘贴的功能。

另一种选择是进行以下操作:

    bool isItNiceOrPretty (ExampleStruct toVerify, bool checkForNiceness)
    {
        if (checkForNiceness) return toVerify.IsNice;
        else return toVerify.IsPretty;
    }

但是,如果不止这两种类型呢?好吧,我可以将这个 bool 参数变成一个整数或一个字符串,但是我需要保留一个包含所有键值及其各自字段的表......这有可能造成困惑和违反直觉我添加和/或删除了我什至不想再考虑的示例结构的字段。

那么,有没有办法按照我的想法,创造出这么灵活的功能呢?还是我必须坚持使用可怕的 Ctrl+C Ctrl+V?

最佳答案

你可以传入一个 Func<ExampleStruct,bool> :

bool DoSomething(ExampleStruct value, Func<ExampleStruct,bool> predicate)
{
    if (predicate(value))
    {
       // Do your thing
    }
}

然后您可以通过以下方式调用它:

bool result = DoSomething(toVerify, v => v.IsNice);

关于c# - 如何提供要在函数中使用的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14329164/

相关文章:

c# - 在 C# WPF 窗体中运行 javascript

c# - 时区缩写

c++ - 在 lambda 中捕获所有内容与仅捕获一些内容

java - 为什么单个下划线字符是 lambda 参数的非法名称?

c# - 如何在 ASP.NET 上发生断开连接时立即检测到而不进行轮询?

c# - 在 foreach 循环中的 expando 对象中添加新属性

.net - 如何从企业应用程序的类设计开始?

c# - 我在哪里可以找到关于冒泡的好教程?

c# - 回发与 Javascript 客户端计算

c# - 用 Func 替换 MongoDB 查询中的 lambda 表达式