Использование value-типов с новыми возможностями C# 3.0
От: nikov США http://www.linkedin.com/in/nikov
Дата: 23.12.07 10:34
Оценка: 317 (24)
Использование value-типов с новыми возможностями C# 3.0 (object initializers, expression trees) может давать неверные результаты в релизе VS 2008.

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=319387
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=319429
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=319430

Один из примеров:

using System;

namespace Nikov.Bugs
{
    class Program
    {
        static void Main()
        {
            Foo<S>();
        }

        static void Foo<T>() where T : I, new()
        {
            var a = new S();
            a.X = 1;
            Console.WriteLine(a.X); // 1, OK

            var b = new S { X = 1 };
            Console.WriteLine(b.X); // 1, OK

            var c = new T();
            c.X = 1;
            Console.WriteLine(c.X); // 1, OK

            var d = new T { X = 1 };
            Console.WriteLine(d.X); // 0, Неверно!
        }
    }

    interface I
    {
        int X { get; set; }
    }

    struct S : I
    {
        public int X { get; set; }
    }
}


Будьте внимательны, не забывайте писать unit-тесты.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.