1
「Usuario」はいくつかのプロパティを持つシンプルなクラスです。 地図は、私が他の子に使いたいものを一般的な機能は、「Usuario」のようclasesされています。ここではこのアーキテクチャではなぜマップ機能がマップデータ型を推論できないのですか?
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場合usuario.Map<Usuario>();
の代わりusuario.Map();
を置く必要があるのはなぜvarはUsuarioデータ型ですか?それは推論することはできませんか?
いいえ、あなたは*型パラメータが推測されることを*期待していますか?どのような特定の型を意図しているのか、コンパイラはどうやって考えていますか? 'usuario'が' Usuario'型であるからといって、唯一の論理型パラメータが 'Usuario'であることを意味するものではありません。 'Repository'から派生し、パラメータのないコンストラクタを持つ他の型を使うこともできます。 –