我试图将类上的集合属性标记为已过时,以查找所有出现的情况并在我的警告列表中保留要修复的缩小列表,因为我们需要用其他东西替换这个集合属性。
编辑:我已经通过 Microsoft Connect 提交了这个,问题 #417159。
编辑 16.11.2010:验证现在在为 .NET 3.5 和 4.0 编译时,这在 C# 4.0 编译器中有效。我在发布的代码中收到 4 条警告,包括带有注释“不好?”的一条。
然而,令我惊讶的是,该列表仅包含一些事件,远远少于我所知道的,并且抽查告诉我,出于某种原因,该属性的使用并不总是被编译器在警告列表中标记为过时.
这是一个示例程序,可以在 Visual Studio 2008 中编译。
请注意末尾附近标有 #1-#4 的四行,其中,我希望他们所有人都报告使用的属性已过时,但 #3 不是,而且似乎如果我继续直接添加到集合属性或方法中,属性本身的使用不会被标记为过时。请注意,#3 和#4 引用相同的属性,并且#4 被标记为使用过时的属性,而#3 不是。测试表明,如果我在表达式中访问属性返回的集合的属性或方法,编译器不会抱怨。
这是一个错误,还是我不知道的 C# 编译器的“隐藏的宝石”?
using System;
using System.Collections.Generic;
namespace TestApp
{
public abstract class BaseClass
{
[Obsolete]
public abstract String Value
{
get;
}
[Obsolete]
public abstract String[] ValueArray
{
get;
}
[Obsolete]
public abstract List<String> ValueList
{
get;
}
}
public class DerivedClass : BaseClass
{
[Obsolete]
public override String Value
{
get
{
return "Test";
}
}
[Obsolete]
public override String[] ValueArray
{
get
{
return new[] { "A", "B" };
}
}
[Obsolete]
public override List<String> ValueList
{
get
{
return new List<String>(new[] { "A", "B" });
}
}
}
public class Program
{
public static void Main(String[] args)
{
BaseClass bc = new DerivedClass();
Console.Out.WriteLine(bc.Value); // #1 - OK
Console.Out.WriteLine(bc.ValueArray.Length); // #2 - OK
Console.Out.WriteLine(bc.ValueList.Count); // #3 - Not OK?
List<String> list = bc.ValueList; // #4 - OK
}
}
}