将方法转换为通用方法?

时间:2011-09-08 12:19:22

标签: c# .net generics

我创建了一个如下所示的方法,

public BOEod CheckCommandStatus(BOEod pBo, IList<string> pProperties)
{
    pBo.isValid = false;
    if (pProperties != null)
    {
        int Num=-1;
        pBo.GetType().GetProperty(pProperties[0].ToString()).GetValue(pBo, null);
        if (ifIntegerGetValue(pBo.GetType().GetProperty(pProperties[0].ToString()).GetValue(pBo, null).ToString(), out Num))
        {
            if (Num == 1)
                pBo.isValid = true;
        }

    }
    return pBo;
}

我需要转换这个方法,它应该接受所有类型的对象(现在我只接受“BOEod”类型的对象)。

因为我是.Net的新手,所以不知道如何使用泛型。我能用Generics完成这个吗?

解决方案像这样:

public T CheckCommandStatus<T>(T pBO, Ilist<string> pProperties){..}

这里主要是我需要更改传递对象的属性(pBO)并返回它。

2 个答案:

答案 0 :(得分:5)

您需要BOEod来实现定义IsValid的接口。

然后,您将向方法添加一个通用约束,以仅接受实现该接口的对象。

  public interface IIsValid
  {
      bool IsValid{get;set;}
  }

...

  public class BOEod : IIsValid
  {
      public bool IsValid{get;set;}
  }

...

public T CheckCommandStatus<T>(T pBO, IList<string> pProperties) 
where T : IIsValid{..}

答案 1 :(得分:2)

public BOEod CheckCommandStatus<T>(T pBo, IList<string> pProperties) where T : IBOEod
{
    pBo.isValid = false;
    if (pProperties != null)
    {
        int Num = -1;
        string propValue = pBo.GetType().GetProperty(pProperties[0].ToString()).GetValue(pBo, null).ToString();
        if (ifIntegerGetValue(propValue, out Num))
        {
            if (Num == 1)
                pBo.isValid = true;
        }
    }
    return pBo;
}

public interface IBOEod
{
    bool IsValid { get; set; }
}

您要传递给此方法的所有类型都必须实现IBOEod接口。