c# – 编译器不会在Linq中使用的过时属性上引发错误

不知怎的,当我在VS 2008中编译它时它没有引发错误,有没有办法标记它所以它确实引发错误?

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            Program[] programs = null;

            var result = programs.Where(p => p.Value.Length == 0);
        }

        [Obsolete("Do not use", true)]
        public string Value { get; set; }
    }
}

此代码无论如何都不会运行,但它应该在编译时引发错误,如果你只是执行p.Value它会将它标记为过时但在添加.Length或任何其他属性/方法时会以某种方式忽略它

最佳答案 您使用的是哪个版本的Visual Studio?我刚刚尝试使用C#4编译器编译代码,并得到了这个:

Test.cs(12,42): error CS0619: 'Program.Value' is obsolete: 'Do not use'

我想知道这是否是C#3编译器(VS2008 / .NET 3.5附带)中的一个错误,它是为C#4编译器修复的.

点赞