从对象中提取值

本文关键字:提取 对象 | 更新日期: 2023-09-27 18:19:57

我想制作一个动态方法,在该方法中我传递我制作的对象的任何实例,例如:

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中提取任何值吗?我曾尝试过这样做,但它没有这样做的属性,当我放入手表时,我可以准确地看到其中类员工的所有属性。

有什么办法吗?

从对象中提取值

有很多方法

更新:您说您想要整个对象。铸造或接口以暴露属性是前进的方向。

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

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并希望在运行时获得最佳效果(.NET4):

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

然后是反思。

但更好的问题是,这是一个好方法吗?我会有点怀疑那些接受任何东西并对事物抱有期望的方法。。。但这并不是说它不会或不应该发生。

是的,您可以通过简单地将对象类型转换回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
      }
    }