当前位置: 首页 > 编程语言 > C#

如何通过lambda表达式传递属性?分享

时间:2023-04-11 00:56:27 C#

如何通过lambda表达式传递属性?我在我的项目中有一些单元测试,我们希望能够在其中设置一些具有私有设置器的属性。目前我通过反射和这个扩展方法来做到这一点:}假设我有一个这样的TestObject:publicclassTestObject{publicintTestProperty{get;私有集;然后我可以在我的单元测试中这样调用它:myTestObject.SetPrivateProperty("TestProperty",1);但是,我想在编译时验证属性名称,所以我希望能够像这样在via表达式中传递属性:myTestObject.SetPrivateProperty(o=>o.TestProperty,1);此时我该怎么做?C#6.0的新增功能:nameof(property)如果getter是公共的,则以下内容应该有效。它会给你一个扩展方法,看起来像这样:varpropertyName=myTestObject.NameOf(o=>o.TestProperty);它需要一个公共吸气剂。我希望,在某个时候,像这样的反射特性已经融入到语言中。以上就是C#学习教程:如何通过lambda表达式传递属性?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——publicstaticclassName{publicstaticstringOf(LambdaExpressionselector){if(selector==null)抛出新的ArgumentNullException("选择器");varmexp=selector.BodyasMemberExpression;if(mexp==null){varuexp=(selector.BodyasUnaryExpression);if(uexp==null)thrownewTargetException("无法使用表达式确定成员的名称,因为所提供的表达式无法转换为'"+typeof(UnaryExpression).Name+"'。");mexp=uexp.OperandasMemberExpression;}if(mexp==null)thrownewTargetException("无法使用表达式确定成员的名称,因为所提供的表达式无法转换为'"+typeof(MemberExpression).Name+"'。");返回mexp.Member.Name;}publicstaticstringOf(表达式>选择器){returnOf(选择器);}publicstaticstringOf(Expression>selector){returnOf(selectorasLambda表达式);}}publicstaticclassNameExtensions{publicstaticstringNameOf(thisTSourceobj,Expression>selector){returnName.Of(selector);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: