[英]c# ambiguous attributes
我阅读了以下重要问题: C#中的属性,并学到了很多有关属性的知识。
我正在使用使用多个属性的库。 例:
[State]
public class USStates
{
[City]
public void isNewYork() { }
[Zip]
public ZipCode GetZipCode() { }
}
我想创建自己的属性,并使用来自第三方名称空间的现有属性(州,城市,邮编)对我的类进行其他工作。 例如,我正在努力实现这一目标:
using 3rdPartyNamespace;
using MyOwnSuperNamespace;
public class State : Attribute
{
// my own implementation/extension of State
}
// create City, Zip attributes respectively
[State]
public class USStates
{
[City]
public void isNewYork() { }
[Zip]
public ZipCode GetZipCode() { }
}
我尝试了上述方法,但在所有3个属性上均得到了模棱两可的属性错误。 我如何告诉编译器直接调用这两个属性而不是使用其中一个? 我想保留现有属性并执行其他工作,而不必用我创建的其他属性来标记我的班级。
这可能吗?
我如何告诉编译器直接调用这两个属性而不是使用其中一个?
如果要应用两个属性,则需要指定两个属性。 您需要完全限定属性名称,或使用别名指令using
,例如
using Mine = MyOwnSuperNamespace;
using Theirs = 3rdPartyNamespace;
[Mine.State]
[Theirs.State]
...
您可以扩展State属性并添加自己的属性。 例如:
public class MyState : StateAttribute
{
public string MyProperty {get;set;}
}
// create City, Zip attributes respectively
[MyState {MyProperty = "Test"}]
public class USStates
{
[City]
public void isNewYork() { }
[Zip]
public ZipCode GetZipCode() { }
}
您可以通过以下方式检查属性:
USStates states = new USStates();
var attribute = states.GetType().GetCustomAttributes(typeof(MyStateAttribute, false)).FirstOrDefault();
if (attribute != null)
{
var prop = attribute.MyProperty;
// Do stuff..
}
您要[State]
解析为两个属性? 那是完全不可能的。 您需要同时指定两者,并同时使用命名空间,以避免产生歧义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.