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/