C# 相当于字段的 typeof

标签 c# .net reflection

通过反射,您可以在运行时从字符串中查找类,但您也可以使用 typeof(Foo) 并获得编译时类型检查、自动完成等。

如果你想要的是一个字段而不是一个类,你可以在运行时从一个字符串中查找它,但是如果你想要编译时类型检查等,有没有像 fieldof(Foo.Bar) 这样的东西?我事先知道类名和字段名,我希望能够在编译时引用字段,而不是通过运行时字符串查找。

编辑:我想用它来做什么的一个例子,假设我有一个可能已经从数据库中读取的对象列表,我想在 DataGridView 中显示它们,但我只想要显示的列对于某些领域。我想写一个类似这样的方法:

void DisplayData(object[] objs, params FieldInfo[] fields)

并且能够像这样调用它

DisplayData(accounts, fieldof(Account.Name), fieldof(Account.Email));

那种想法。

最佳答案

您可以使用表达式摆脱字符串文字

public static PropertyInfo GetProperty<T>(Expression<Func<T, object>> expression)
{
    MemberExpression memberExpression = null;

    if (expression.Body.NodeType == ExpressionType.Convert)
    {
        memberExpression = ((UnaryExpression)expression.Body).Operand as MemberExpression;
    }
    else if (expression.Body.NodeType == ExpressionType.MemberAccess)
    {
        memberExpression = expression.Body as MemberExpression;
    }

    return memberExpression.Member as PropertyInfo;
}

// usage:
PropertyInfo p = GetProperty<MyClass>(x => x.MyCompileTimeCheckedPropertyName);

关于C# 相当于字段的 typeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777322/

相关文章:

c# - 从某个日期 Android DatePicker 的几个月后禁用所有日期

c# - 当我在两个连续的语句中读/写它时,我需要锁定一个 bool 值吗?

.net - Eazfusctor.net - 排除文件

javascript - 如何重置 iframe

c# - 如何找到未执行的代码

c# - 在 ASP.NET 调试期间使用 Activator.CreateInstanceFrom 时类型不匹配

c# - .Net 和 C# 中的反射导向和切面导向

c# - c# 客户端应用程序中用户设置/配置的最佳实践

c# - 重新启动时删除非空文件夹

c# - 我是否可以将 SQLite3 C 函数正确导入到 C# 中