1

我想在一个受接口约束的泛型方法中访问新创建对象的属性:

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没有“名称”的定义

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

4

2 回答 2

1

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

于 2015-03-26T13:40:36.130 回答
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。

于 2015-03-26T13:45:13.140 回答