System.Enum - ссылочный тип?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.10.06 12:10
Оценка:
Господа, объясните странный результат.

using System;

class Program
{
    static void Main()
    {
        IsReferenceType<Enum>();
    }
    static void IsReferenceType<T>() where T : class
    {
        Console.WriteLine(typeof(T).IsClass); // False
    }
}


Если System.Enum — ссылочный тип, то почему выводится False?
А если не ссылочный, то почему код компилируется (см. констрэйнт)?
Re: System.Enum - ссылочный тип?
От: Mab Россия http://shade.msu.ru/~mab
Дата: 11.10.06 12:21
Оценка: :)
Здравствуйте, nikov, Вы писали:

Вопрос из той же серии: отчего в MSDN топик про Enum озаглавлен "Enum Structure", зато содержит код
public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible

Re[2]: System.Enum - ссылочный тип?
От: desco США http://v2matveev.blogspot.com
Дата: 11.10.06 12:28
Оценка: 1 (1)
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, nikov, Вы писали:


Mab>Вопрос из той же серии: отчего в MSDN топик про Enum озаглавлен "Enum Structure", зато содержит код

Mab>
Mab>public abstract class Enum : ValueType, IComparable, IFormattable, IConvertible
Mab>

Mab>

добавлю
Type.IsClass Property

This property returns true for Type instances representing Enum and ValueType.


однако

Console.WriteLine(typeof(Enum).IsClass); // false
Re[2]: System.Enum - ссылочный тип?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 11.10.06 12:33
Оценка:
using System;

class Program
{
    static void Main()
    {
        IsReferenceType<Enum>();
        IsReferenceType<ValueType>();
    }
    static void IsReferenceType<T>() where T : class
    {
        Console.WriteLine(typeof(T).IsValueType);
        Console.WriteLine(typeof(T).IsClass);
    }
}

False
False
False
True


Во как! Он ни то, ни другое.
Re[3]: System.Enum - ссылочный тип?
От: desco США http://v2matveev.blogspot.com
Дата: 11.10.06 12:36
Оценка:
Здравствуйте, nikov, Вы писали:

N>
N>using System;

N>class Program
N>{
N>    static void Main()
N>    {
N>        IsReferenceType<Enum>();
N>        IsReferenceType<ValueType>();
N>    }
N>    static void IsReferenceType<T>() where T : class
N>    {
N>        Console.WriteLine(typeof(T).IsValueType);
N>        Console.WriteLine(typeof(T).IsClass);
N>    }
N>}
N>

False
N>False
N>False
N>True


N>Во как! Он ни то, ни другое.


ну то, что typeof(Enum).IsValueType == false следует из документации
Type.IsValueType Property

Remarks
<skipped>
This property returns true for enumerations, but not for the Enum type itself.

Re[3]: System.Enum - ссылочный тип?
От: AndreiF  
Дата: 12.10.06 11:51
Оценка:
Здравствуйте, nikov, Вы писали:

N>Во как! Он ни то, ни другое.


это еще не самое забавное

typeof(Enum).IsEnum == false
Re[4]: System.Enum - ссылочный тип?
От: desco США http://v2matveev.blogspot.com
Дата: 12.10.06 11:56
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, nikov, Вы писали:


N>>Во как! Он ни то, ни другое.


AF>это еще не самое забавное


AF>typeof(Enum).IsEnum == false


ну это как раз разьясняется

Type.IsEnum Property

This property returns true for an enumeration, but not for the Enum type itself.

Re: System.Enum - ссылочный тип?
От: Аноним  
Дата: 12.10.06 12:41
Оценка:
Здравствуйте, nikov, Вы писали:

N>Господа, объясните странный результат.


Кароче говоря, надо документацию читать внимательней.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.