【问题标题】:Passing unknown type as parameter to a method then casting to that type later on将未知类型作为参数传递给方法,然后稍后转换为该类型
【发布时间】:2014-07-03 15:37:30
【问题描述】:

我需要创建一个接受未知类型的方法,然后使用该类型访问对象。

更详细一点。我有一个 DevEx 网格,我正在使用 GetRow 来获取记录。 GetRow 必须是 Linq 类对象的类型才能访问记录的属性。我正在尝试创建一个通用方法,该方法允许我传入 Linq 对象的类型,然后将结果从 GetRow 动态转换为该对象。然后我将获取列字段名来访问这样的属性(objectType 是未知类型):

void DoGrid (GridView gv, objectType)
{    

    PropertyInfo[] properties = objectType.GetProperties();

    foreach (GridColumn col in gv.Columns)
        {
             if (col.Visible)
             {
                 PropertyInfo property = properties.Where(prop => prop.Name == col.FieldName).FirstOrDefault();
                 ...
             }
        }

}

【问题讨论】:

  • 我只想传入类型。我不认为 var 在上面的例子中会起作用。

标签: c# linq generics dynamic


【解决方案1】:

您只是在寻找一种使用泛型的方法吗?也许是这样的:

void DoGrid<T>(GridView gv)
{
    PropertyInfo[] properties = typeof(T).GetProperties();

    foreach (GridColumn col in gv.Columns)
    {
        ...
    }
}

然后你会像这样使用它:

DoGrid<MyClassFullOfProperties>(myGridView);

【讨论】:

  • 比我快 40 秒。
  • 是的,这就是我要找的。我试图在类构造函数中这样做,但是在将它传递给这个私有方法时遇到了问题。我想我会把上面的方法公开。
  • 现在我收到错误“System.Reflection.PropertyInfo[] 不包含 Where 的定义
  • 您可能需要在代码文件顶部添加using System.Linq;.Where(...) 是一种扩展方法。
  • 我的错……一直在搬东西。谢谢
猜你喜欢
  • 2015-12-26
  • 2021-04-23
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
相关资源
最近更新 更多