通用方法:使用Interface约束,如何访问属性

时间:2015-03-26 13:33:11

标签: c# properties interface generic-method

我想在泛型方法中访问新创建对象的属性,这是接口的约束:

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;

的定义

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

2 个答案:

答案 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。