我想在泛型方法中访问新创建对象的属性,这是接口的约束:
public interface MyInterface
{
int ID { get; set; }
string Name { get; set; }
}
因为编译器知道" T"属于MyInterface类型,应该可以访问该接口的属性:
public T doSomething<T>(String value) where T : MyInterface, new()
{
T entity = new T();
entity.Name = value;
return entity;
}
但它是sais: T没有&#39;名称&#39;
的定义如果我可以在这里使用接口作为约束:为什么不能访问其属性?
答案 0 :(得分:1)
您发布的代码本身是正确的。也许你有不同版本的界面(不同命名空间中的MyInterface)?检查接口类型的名称空间/完全限定名称。如果在另一个程序集中声明类型,还要检查程序集版本......
答案 1 :(得分:1)
public class Foo2 : MyInterface
{
public int ID { get; set; }
public string Name { get; set; }
}
...
var foo = doSomething<Foo2>("test");
Console.WriteLine(foo.Name);
只要您的代码具有接口的命名空间和using子句中的具体类,似乎就可以工作。另外,作为惯例,MyInterface应该是IMyInterface。