1

在以下示例代码中:

public class Foo
{
    public struct Data
    {
        public int val;
    }

    public Data Data

    void method(Foo foo)
    {
        foo.Data.val = 10;
    }
}

前面的示例导致以下错误:

错误 3 'Foo.Data' 和 'Foo.Data' 之间的歧义

知道如何在不必重命名成员变量的情况下修复此错误吗?由于我通过对象实例访问“数据”,因此编译器选择“数据”成员变量而不是“数据”类型对我来说听起来很合乎逻辑。

4

3 回答 3

1

发生这种情况,以及第二个更明显的错误,因为它们都具有相同的完全限定名称——它们都是Foo.

如果您将结构移到类外,它将正常工作。

于 2013-06-06T15:00:52.077 回答
0

除了将嵌套结构移到外部(或重命名您明确排除的属性)之外,您根本无法做到这一点:

public struct Data
{
    public int val;
}

public class Foo
{
    public Data Data;

    void method(Foo foo)
    {
        foo.Data.val = 10;
    }
}

如果您想保持struct Data更明显的相关性,Foo可以将它们都放在嵌套命名空间中:

namespace FooThings
{
    public struct Data
    {
        public int val;
    }

    public class Foo
    {
        public Data Data;

        void method(Foo foo)
        {
            foo.Data.val = 10;
        }
    }
}

注意:您的 OP 的实际错误是"The type 'Demo.Foo' already contains a definition for 'Data'"(在修复丢失的“;”之后)。

于 2013-06-06T15:01:20.710 回答
0

改变

public Data Data;

public Data data;

接着

void method(Foo foo)
{
    foo.data.val = 10;
}
于 2013-06-06T15:16:37.943 回答