' Usuario'它是一个带有一些属性的简单类。 Map是一个通用函数,我想在其他子句中使用它,例如' Usuario':
public abstract class Repository : IRepository
{
public TEntity Map<TEntity>() where TEntity : Repository, new()
{
TEntity clone = new TEntity();
PropertyInfo[] objProperties = this.GetType().GetProperties();
foreach (PropertyInfo pi in objProperties)
{
if (pi.PropertyType.IsPrimitive ||
pi.PropertyType.FullName.Contains("System.Int") || //when int primitives are nullables it's needed
pi.PropertyType.FullName.Contains("System.DateTime") ||
pi.PropertyType.FullName.Contains("System.Decimal") ||
pi.PropertyType.FullName.Contains("System.Float") ||
pi.PropertyType.FullName.Contains("System.Double") ||
pi.PropertyType.FullName.Contains("System.String") ||
pi.PropertyType.FullName.Contains("System.Boolean") ||
pi.PropertyType.FullName.Contains("System.Byte") ||
pi.PropertyType.FullName.Contains("System.Guid"))
{
if (pi.CanWrite)
{
pi.SetValue(clone, pi.GetValue(this));
}
}
}
return clone;
}
}
以下是用法:
// GET: api/Usuarios/5
[ResponseType(typeof(Usuario))]
public IHttpActionResult GetUsuario(int id)
{
Usuario usuario = db.Usuarios.Find(id);
if (usuario == null)
{
return NotFound();
}
return Ok(usuario.Map<Usuario>());
}
如果usuario var属于Usuario数据类型,为什么我需要放usuario.Map<Usuario>();
而不是usuario.Map();
?它不能被感染吗?
答案 0 :(得分:1)
您无法通过返回类型推断类型,但是体系结构的轻微更改使您无需执行此操作,您需要使基类通用。
public abstract class Repository<TEntity> : IRepository
where TEntity : Repository<TEntity>, new()
{
public TEntity Map()
{
TEntity clone = new TEntity();
// (Snip)
return clone;
}
}
然后在Usuario
中,您将从
public class Usuario : Repository
到
public class Usuario : Repository<Usuario>
你的用法变成了
[ResponseType(typeof(Usuario))]
public IHttpActionResult GetUsuario(int id)
{
Usuario usuario = db.Usuarios.Find(id);
if (usuario == null)
{
return NotFound();
}
return Ok(usuario.Map());
}