【发布时间】:2016-07-05 18:20:53
【问题描述】:
'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();?无法推断?
【问题讨论】:
-
没有。您将如何期望推断类型参数?编译器应该如何知道您打算使用任何特定类型?仅仅因为
usuario是Usuario类型,并不意味着唯一的逻辑类型参数是Usuario。您也可以使用派生自Repository并具有无参数构造函数的 any 其他类型。
标签: c# .net inheritance