泛型方法:用接口约束,如何访问属性

Generic method: Contraint with Interface, how to access properties

我想访问 属性 在通用方法中创建的新对象,该方法受接口约束:

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;
}

但是它说:T 没有 'Name'

的定义

如果我可以在这里使用接口作为约束:为什么不能访问它的属性?

您发布的代码本身是正确的。也许您有不同版本的界面(不同命名空间中的 MyInterface)?检查接口类型的命名空间/完全限定名称。如果在另一个程序集中声明类型,还要检查程序集版本...

    public class Foo2 : MyInterface
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

...

    var foo = doSomething<Foo2>("test");
    Console.WriteLine(foo.Name);

只要您的代码在 using 子句中具有接口的命名空间和具体 class,似乎就可以工作。另外,按照惯例,MyInterface 应该是 IMyInterface。