假设我有一个属性有一个属性
Public Class MyClass
Public Property MyItem() as Object
....
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
我必须将属性的名称传递给函数调用.(请不要问为什么要这样做,它是第三方框架).例如
SomeFunc("MyItem")
Run Code Online (Sandbox Code Playgroud)
但我想要做的是,将字符串更改为强类型参数.这意味着,如果重命名或更改属性名称,也应该在此处反映出来.
所以这种类型的东西:
Dim objectForStrongTyping as New MyClass()
SomeFunc(objectForStrongTyping.MyItem().Name())
Run Code Online (Sandbox Code Playgroud)
我相信这不会奏效.有没有办法可以完成这种强力打字?(C#或VB.NET,任何事情都很酷)
我正在寻找一种方法将强类型属性名称列表传递到一个方法,然后我可以解析并获取调用者感兴趣的属性.我想这样做的原因是有一个复制方法,仅复制用户指定的字段.现在,该方法采用一个字符串列表与Getvalues一起使用,并在反射中获取属性方法,但我想防止重构属性和开发人员未更新的字符串.
我在这里发现了这篇文章,但不幸的是,它没有列表.我可以这样做:
public static void Copy(Expression<Func<TObject>> propertiesToCopy )
{
}
Run Code Online (Sandbox Code Playgroud)
然后让来电者做
PropertyCopier<List<string>>.Copy(() => data);
Run Code Online (Sandbox Code Playgroud)
但是我必须指定调用者可以拥有的属性数量:
public static void Copy(Expression<Func<TObject>> propertiesToCopy,Expression<Func<TObject>> propertiesToCopy2, Expression<Func<TObject>> propertiesToCopy3 )
{
}
Run Code Online (Sandbox Code Playgroud)
这将允许三个属性.无论如何将它添加到List或Queryable <>以允许与调用者想要的属性一样多?我尝试使用Add in List并使用Expression
提前致谢
编辑:今晚我找到了一些文章,提到使用C#param关键字来实现这一目标.有没有更好或更有效的方法,或者这是最好的方法吗?