我有以下型号:
Public Class MyModel
Public Property MyModelId As Integer
Public Property Description As String
Public Property AnotherProperty As String
End Class
是否有一种方法可以将Model的属性名称作为字符串表示形式获取,如下面的代码?
Dim propertyName as String = GetPropertyNameAsStringMethod(MyModel.Description)
因此propertyName变量将“Description”作为值。
答案 0 :(得分:2)
在此SO主题上检查Darin Dimitrov'answer - Reflection - get property name。
class Foo
{
public string Bar { get; set; }
}
class Program
{
static void Main()
{
var result = Get<Foo, string>(x => x.Bar);
Console.WriteLine(result);
}
static string Get<T, TResult>(Expression<Func<T, TResult>> expression)
{
var me = expression.Body as MemberExpression;
if (me != null)
{
return me.Member.Name;
}
return null;
}
}
希望这有帮助..
答案 1 :(得分:1)
这是一个可以用于任何属性的辅助扩展方法:
public static class ReflectionExtensions
{
public static string PropertyName<T>(this T owner,
Expression<Func<T, object>> expression) where T : class
{
if (owner == null) throw new ArgumentNullException("owner");
var memberExpression = (MemberExpression)expression.Body;
return memberExpression.Member.Name;
}
}
但是,这只适用于类的实例。您可以编写一个类似的扩展方法,直接在该类型上运行。
答案 2 :(得分:1)
你需要使用反射来做。
堆栈溢出已经有很多帖子如下:
How to get current property name via reflection?
Reflection - get property name
Get string name of property using reflection
Reflection - get property name
我相信答案将是:
string prop = "name";
PropertyInfo pi = myObject.GetType().GetProperty(prop);
答案 3 :(得分:0)
创建扩展方法,然后在需要的地方使用它。
Private Shared Function GetPropertyName(Of T)(exp As Expression(Of Func(Of T))) As String
Return (DirectCast(exp.Body, MemberExpression).Member).Name
End Function
还要查看this帖子。
答案 4 :(得分:0)
我已经解决了这个问题编辑@ NiranjanKala的源代码示例
像这样转换vb.Net中的代码
<System.Runtime.CompilerServices.Extension()> _
Public Function GetPropertyName(Of T, TResult)(expression As Expression(Of Func(Of T, TResult))) As String
Dim [me] = TryCast(expression.Body, MemberExpression)
If [me] IsNot Nothing Then
Return [me].Member.Name
End If
Return Nothing
End Function
然后我可以像这样调用扩展名
Dim propertyName as String = GetPropertyName(Of MyModel, String)(Function(x) x.Description)
然后propertyName变量将“Description”作为字符串值。