访问名为c#类型的变量

时间:2013-06-06 14:57:49

标签: c# variables naming ambiguity

在以下示例代码中:

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'

之间存在歧义

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

3 个答案:

答案 0 :(得分:1)

这会发生第二个更明显的错误,因为它们都具有相同的完全限定名称 - 它们都是Foo的成员。

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

答案 1 :(得分: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'"(在修复缺失的“;”之后)。

答案 2 :(得分:0)

更改

public Data Data;

public Data data;

然后

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