相关疑难解决方法(0)

'CompanyName.Foo'是'命名空间',但用作'类型'

重述问题

我正在复活这个问题,因为我今天刚刚再次遇到这个错误,我仍然完全混淆为什么C#编译器无法检查命名空间和类型中的类型之间的冲突,因为命名空间不存在.

如果我有...

public Foo MyFoo { get; set; }
Run Code Online (Sandbox Code Playgroud)

...为什么编译器会关心Foo命名空间和类型?您可以将属性声明为命名空间而不是类型吗?

"名称空间使用类似"编译器错误背后的逻辑是什么?这有什么问题可以拯救我?

[我如何标记Eric Lippert?:)]


原始问题


问题

我有一个带有默认命名空间的项目"Foo" CompanyName.Foo.我有一个名为"Foo"的数据库.

当我在数据库上运行SqlMetal.exe时,它会生成一个类CompanyName.Foo.Models.Foo.

然后,当我尝试使用此类作为类型创建属性时,像这样......

using CompanyName.Foo.Models;
...
public Foo DataContext { get; set; }
Run Code Online (Sandbox Code Playgroud)

......我收到错误:

'CompanyName.Foo'是'命名空间',但用作'类型'.

我被迫做...

public CompanyName.Foo.Models.Foo Foo { get; set; } // :-(
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么会出现此错误?我的财产声明不包含CompanyName,为什么这是一个问题?简单地说:Foo != CompanyName.Foo.另外,为了确保,我搜索了我的整个解决方案,namespace Foo并提出了零命中(如果我实际使用了命名空间Foo,我可以理解得到错误).

  2. [回答]Foo每次我想使用它时,有没有办法完全符合条件?

  3. [回答]有没有办法让SqlMetal将类命名为Foo(不用更改我的数据库名称)?我可以使用开关更改命名空间,但我不知道如何更改实际的类名.

更新

仍在寻求(1)的答案.

OKW钉(2)和(3).

Usings

我的所有using陈述都提出了要求:

using System;
using System.ComponentModel;
using System.Data.Linq; …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction code-generation namespaces linq-to-sql

45
推荐指数
3
解决办法
6万
查看次数