错误“CS0104:'DataType'是'System.ComponentModel.DataAnnotations.DataType'和'CarlosAg.ExcelXmlWriter.DataType'之间的模糊引用”

时间:2013-12-09 10:09:27

标签: c# asp.net

我收到此错误:

  

" CS0104:' DataType'是一个模棱两可的参考   ' System.ComponentModel.DataAnnotations.DataType'和   ' CarlosAg.ExcelXmlWriter.DataType'"

运行ASP.NET 4.0应用程序时

。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

你有一个符号冲突 - 你的源文件范围内有两个类,它们都被称为DataType - 一个在namespace System.ComponentModel.DataAnnotations,另一个在命名空间CarlosAg.ExcelXmlWriter.DataType'

您需要执行以下操作之一来解决此问题:

1。在每次使用时明确提供完整的名称空间前缀,即 System.ComponentModel.DataAnnotations.DataTypeCarlosAg.ExcelXmlWriter.DataType

var cdt = new CarlosAg.ExcelXmlWriter.DataType();
var sdt = new System.ComponentModel.DataAnnotations.DataType();

OR 2。或使用using directive to alias命名空间/类型,例如

using SystemDT = System.ComponentModel.DataAnnotations;
using Carlos = CarlosAg.ExcelXmlWriter;

然后使用命名空间别名识别类型,例如..

var dt = new Carlos.DataType();

OR 3。您也可以在班级别名:

using SystemDataType = System.ComponentModel.DataAnnotations.DataType;
using CarlosDataType = CarlosAg.ExcelXmlWriter.DataType;
...
var myObj = new CarlosDataType();

OR 4。如果您不需要两个名称空间中的符号,请从using子句中删除未使用的名称空间。

我倾向于选项2 - 它使读者更清楚地知道存在命名空间冲突,而不是过于冗长(如选项1所示)

修改

  

Re:“我试过给出完整的前缀,但我仍然得到错误”CS0138:A   使用namespace指令只能应用于命名空间;   'CarlosAg.ExcelXmlWriter.DataType'是一种类型而不是命名空间“

(所有与上述第2点相关)。错误消息指的是这样的情况,在.Net中是不允许的(但在Java导入中是允许的)

// i.e. This won't work, can't import at a class level unless it is aliased
using System.ComponentModel.DataAnnotations.DataType; 

根据我的回答,我建议您为命名空间设置别名,然后使用别名前缀消除2 DataType s

之间的歧义

答案 1 :(得分:0)

我有同样的问题。我使用的解决方案是删除所有使用并再次进行引用。效果很好。