C# 通用方法:具有接口的约束,如何访问属性
我想访问泛型方法中新创建对象的属性,该方法受接口约束:C# 通用方法:具有接口的约束,如何访问属性,c#,properties,interface,generic-method,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 =
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;
}
publictdosomething(字符串值),其中T:MyInterface,new()
{
T实体=新的T();
实体名称=值;
返回实体;
}
但它说:T没有“名称”的定义
如果我可以在这里使用接口作为约束:为什么不能访问其属性?您发布的代码本身是正确的。也许您的接口有不同的版本(MyInterface在不同的名称空间中)?检查接口类型的名称空间/完全限定名称。如果在另一个程序集中声明类型,请检查程序集版本
public class Foo2 : MyInterface
{
public int ID { get; set; }
public string Name { get; set; }
}
var foo=doSomething(“测试”);
Console.WriteLine(foo.Name);
只要代码在using子句中具有接口的名称空间和具体类,似乎就可以工作。另外,按照惯例,MyInterface应该是IMyInterface。在另一个命名空间中是否有
MyInterface
?你做过清洁和重建吗?对我来说很好。我没有任何问题这真的是你的实际代码吗?是的,这是另一个名称空间,但我通过“使用”语句集成了它。不,这不是我的实际代码,它被简化了。在我看来,这主要是名称空间问题。创建一个简单的类,然后尝试在其中实现您的MyInterface
。如果是命名空间问题,编译器将抛出错误,请告诉我们错误
var foo = doSomething<Foo2>("test");
Console.WriteLine(foo.Name);