c# - 使用泛型类 C# 键入奇怪的命名空间

标签 c# generics namespaces

我有一个 C# 程序和以下(我想是新手)问题:

namespace ObjectReference
{
    public class A<TypeC>
    {
        public B b;

        public void MethodA()
        {
            b = new B(this);
        }
    }
}

在同一项目的不同文件中:

namespace ObjectReference    
{    
    public class B    
    {   
        public A<TypeC> a;

        public B(A<TypeC> myObjA)    
        {    
            a = myObjA;   
        }
    }    
}

在定义类 A 的文件中,我在“b = new B(this);”行收到此错误:"Argument 1: cannot convert from 'ObjectReference.A<TypeC>' to 'ObjectReference.A<ObjectReference.TypeC>'" .

我已经尝试了一切,我无法解决这个问题,我不明白它为什么会出现,所有类都在同一个命名空间 ObjectReference(即类 A、B 和 TypeC)中定义。就像在 A 类中一样,它认为类的类型是 ObjectReference.A<TypeC> ,而在 B 类中,它认为类型是 ObjectReference.A<ObjectReference.TypeC> .

请指教。

谢谢

最佳答案

你写的是这样的:

public class A<T>
{
    public B b;

    public void MethodA()
    {
        b = new B(this);
    }
}

public class B    
{   
    public A<TypeC> a;

    public B(A<TypeC> myObjA)    
    {    
        a = myObjA;   
    }
} 

请注意,我将 A 类写为 A<T>而不是 A<TypeC> .即使您输入了有效的类型名称,它也是合法的 C# 泛型类型,因此在类 A 的定义中 TypeC与类不同 TypeC .因此,您会收到错误消息。

要完成这项工作,您需要执行以下操作:

public class A<T>
{
    public B<T> b;

    public void MethodA()
    {
        b = new B<T>(this);
    }
}

public class B<T> 
{   
    public A<T> a;

    public B(A<T> myObjA)    
    {    
        a = myObjA;   
    }
}    

然后你可以这样调用代码:

var a = new A<TypeC>();
a.MethodA();

希望对您有所帮助。

关于c# - 使用泛型类 C# 键入奇怪的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7819562/

相关文章:

c# - IsPostBack Condition 的作用是什么?

c# - 响应式扩展 - 返回相同的可观察对象还是创建新的?

c# - 将方法添加到通用堆栈时出现问题?

c# - 是否可以在 C# 中将 GenericClass<SubClass> 添加到 List<GenericClass<Base>>?

java - 在这种情况下如何正确使用泛型?

c# - 找不到命名空间名称 'SyntaxTree'

c# - 将 PS 脚本的输出存储在 C# 变量中

c# - 为什么 Web Api 向结果集添加额外的 $id

c++ - 如何布局C++代码: namespaces and similar file names in visual studio 2010

namespaces - 如果我有一个多词名称,thrift 命名空间的命名约定是什么?