如何将这n个方法用于单个泛型方法?

时间:2012-06-18 15:46:26

标签: c# generics

我有一个像这样的基类:

public class BaseResponse
{
  public string ErrorMessage { set;get;}
}

一些继承自此的子类:

public class Person:BaseResponse
{
  public string FirstNAme { set;get;}
}

public class Phone:BaseResponse
{
  public string SerialNumber { set;get;}
}

public class Car :BaseResponse
{
  public string Year{ set;get;}
}

现在我想将此类的每个实例的ErrorMessage属性设置为不同的值。目前这就是我在做的事情:

public Phone GetPhoneError(Phone objPhone)
{
  objPhone.ErrorMessage="Err msg related to Phone";
  return objPhone;
}

public Person GetPersonError(Person objPerson )
{
  objPerson .ErrorMessage="Err msg related to Person";
  return objPerson ;
}

... another similar method for Car also

有什么方法可以让这个方法成为通用格式,这样我就不需要3个单独的方法来设置错误信息了?

4 个答案:

答案 0 :(得分:2)

public T GetError<T>(T obj) where T: BaseResponse
{
  obj.ErrorMessage= string.Format("Err msg related to {0}", typeof(T).Name);
  return obj;
}

我不知道错误消息是这个通用的东西还是自定义的东西。如果是,则将消息作为参数传递。

为什么需要一种方法?是因为你简化了问题吗?

答案 1 :(得分:2)

因此,在您的基类中,您应该创建一个名为SetError的虚拟方法(您的GetError,但使用正确的表示法)。

public abstract string GetErrorMessage(); //In Base Class so that why each implementation will set the correct error message

然后在你的基类中 - 为什么你需要返回你正在修改的同一个对象?

public virtual void SetErrorMessage()
{
   this.ErrorMessage = GetErrorMessage();
}

答案 2 :(得分:1)

您应该能够拥有如下通用方法:

public object GetError(BaseResponse response)
{
   response.ErrorMessage = "whatever";
   return response;
}

答案 3 :(得分:1)

在这种情况下,为什么不设置属性virtual而不需要set? :

public class BaseResponse
{
  public virtual string ErrorMessage { get;}
}


public class Person:BaseResponse
{
  .....
  public override string ErrorMessage {get { return "Err msg related to Person";}}
}


public class Phone:BaseResponse
{
  ......
  public override string ErrorMessage {get { return "Err msg related to Phone";}}
}

以及其他人......