Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用方法:具有接口的约束,如何访问属性_C#_Properties_Interface_Generic Method - Fatal编程技术网

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