在以下示例代码中:
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'
之间存在歧义任何想法如何修复此错误而不必重命名成员变量?由于我通过对象实例访问“数据”,因此编译器选择“数据”成员变量而不是“数据”类型对我来说听起来合乎逻辑。
答案 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;
}