从Object中提取值?

时间:2012-01-09 09:18:48

标签: c# asp.net

我想创建一个动态方法,在其中我传递任何对象的实例,例如:

public class Employee()
{
  public string FName;
  public string SName;
  .....etc.
}

我想要的方法如下:

public void methodName(Object oObject)
{
  //lets say that i have passed object employee to it.
}

是否有可能从oObject中提取任何值,我试图这样做,但它没有这样做的属性,当我放入手表时,我可以在其中实际看到类员工的所有属性。 / p>

那有什么办法吗?

2 个答案:

答案 0 :(得分:2)

有很多方法。

更新:你说你想要整个对象。 Casting或暴露属性的接口是前进的方式。

您可以将对象强制转换为特定类型:

if (oObject is Employee)
{
    string name = (oObject as Employee).FName;
}

您可以公开定义方法所需内容的接口,然后提供的类型实现接口:

public interface IFirstName
{
    string FName { get; }
}

public void methodName(IFirstName objectWithFirstName)
{
    string name = objectWithFirstName.FName;
}

您可以使用dynamic并希望在运行时(.NET 4)获得最佳效果:

public void methodName(dynamic oObject)
{
    string name = oObject.FName;
}

然后有反思。

但更好的问题是,这是一个好方法吗?我会对采取任何措施并对事情有所期待的方法持怀疑态度......但这并不是说它不会或不应该发生。

答案 1 :(得分:1)

是的,您可以通过简单地将类型转换回Employee类来访问值,如此

  public void methodName(Object oObject)
    {
      //lets say that i have passed object employee to it.
      //if oObject belongs to Employee class
      if(oObject is Employee)
      {
          Employee employee = oObject as Employee;
          //you can get access values here
      }
    }