泛型方法:用接口约束,如何访问属性
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。
我想访问 属性 在通用方法中创建的新对象,该方法受接口约束:
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。