C#-不';“我不允许回来”;这";在实现类型的接口时作为类型

C#-不';“我不允许回来”;这";在实现类型的接口时作为类型,c#,C#,我有这个: public class MyClass<T>: IView { public View View() { return this; } public void Render(ViewContext viewContext, System.IO.TextWriter writer) { // We should cycle though all

我有这个:

public class MyClass<T>:  IView
{
        public View View()
        {
            return this;
        }
        public void Render(ViewContext viewContext, System.IO.TextWriter writer)
        {
            // We should cycle though all supported controls and generate HTML for them.
            // What about the validation binding?

            typeof(T).GetFields().ToList<FieldInfo>().ForEach(x => writer.WriteLine(x.FieldType + " is called " + x.Name + "</br>"));           
        }  


}
公共类MyClass:IView
{
公共视图()
{
归还这个;
}
公共void呈现(ViewContext、System.IO.TextWriter)
{
//我们应该循环遍历所有支持的控件并为它们生成HTML。
//验证绑定呢?
typeof(T).GetFields().ToList().ForEach(x=>writer.WriteLine(x.FieldType+”称为“+x.Name+”
”); } }
我得到一个错误,它不能隐式地将其转换为视图。当我尝试施法时失败了。有没有办法做到这一点?为什么会失败

编辑:添加了视图实现。我在课堂上删减了太多内容。很抱歉没有发布足够的内容。

请尝试以下内容:

public class MyClass<T>:  IView
{
        public View View()
        {
            return (MyClass<T>) this;
        }   
}
公共类MyClass:IView
{
公共视图()
{
返回(MyClass)这个;
}   
}
MyClass
实例不能转换为
视图
。它们只能转换为
IView
。如果您想从
视图
类继承,您应该这样做。实现类似命名的接口不会神奇地导致类从所需的基类型继承:

public class MyClass<T> : View { ... }
公共类MyClass:视图{…}

任何一个都可以

public class MyClass<T>:  IView
{
    public IView View()
    {
        return this;
    }   
}
公共类MyClass:IView
{
公共IView视图()
{
归还这个;
}   
}

公共类MyClass:IView
{
公共MyClass视图()
{
归还这个;
}   
}

MyClass不是一个视图,不能像您尝试的那样作为一个视图返回。

我不知道太多的C,但这是MyClass的一种类型?我不明白如何将MyClass转换为view?为什么它不像构造函数..那么为什么方法名与返回类型相同。。这是打字错误吗。。答案可能是T和观点不一致。。但是你甚至没有在任何地方使用过
T
。。那么您应该使用特定类而不是泛型类。。如果是这样,则CaseView仅定义MyClass必须实现View(),因为MyClass没有View作为其基类,因此将无法作为View返回。请在发布答案时尝试缩进代码。您可以手动将每行缩进4个空格,也可以选择整个块并按下工具栏上的
{}
按钮。-1因为您显示的似乎是随机代码实验,而没有解释为什么这会起作用。为什么您决定将
MyClass
更改为
MyClass
?(更新:别提那个问题。你的答案同时也更新了。)当返回类型为
View
时,为什么要在
MyClass
中添加显式强制转换?@stakx:我只是想澄清一下,我实际上并没有更新答案,至少我没有改变任何代码
MyClass
本来就在那里,只是因为块不是格式化的代码,所以没有显示。我会添加..即使视图实现了IView
public class MyClass<T>:  IView
{
    public MyClass<T> View()
    {
        return this;
    }   
}