Всегда ли так, что nameof () равно typeof (). Name? - PullRequest
0 голосов
/ 18 января 2019

Я протестировал класс, методы, поля, свойства и перечисления, чтобы увидеть, есть ли случаи, когда это не так?

Пример DotNetFiddle

using System;

public class Program
{
    public static void Main()
    {
        var fooType = typeof(Foo);
        ThrowIfNotEqual(fooType.Name, nameof(Foo));

        var fi = fooType.GetField(nameof(Foo.field));
        ThrowIfNotEqual(fi.Name, nameof(Foo.field));

        var pi = fooType.GetProperty(nameof(Foo.property));
        ThrowIfNotEqual(pi.Name, nameof(Foo.property));

        var mi = fooType.GetMethod(nameof(Foo.method));
        ThrowIfNotEqual(mi.Name, nameof(Foo.method));

        var fi2 = fooType.GetNestedTypes()[0];
        ThrowIfNotEqual(fi2.Name, nameof(Foo.myEnum));

        ThrowIfNotEqual("TestThisMethod", "WorksAsExpected");
    }

    public static void ThrowIfNotEqual(string a, string b)
    {
        if (a != b) throw new InvalidOperationException($"Are Not Equal: {a} != {b}");
    }

    public class Foo
    {
        public string field;
        public string property { get; set; }
        public void method() { }
        public enum myEnum
        {
            A
        }
    }
}

Результаты:

Исключение во время выполнения (строка -1): Не равны: TestThisMethod! = WorksAsExpected

1 Ответ

0 голосов
/ 18 января 2019

Всегда ли случай, когда nameof() равен typeof().Name

Нет, есть много способов это сломать, просто в качестве примера

public class Foo<T>

* 1011 например *

var fooType = typeof(Foo<string>);
Console.WriteLine(fooType.Name);
Console.WriteLine(nameof(Foo<string>));

выход

Foo`1
Foo

Есть также много ситуаций, когда вы будете получать ошибки компилятора только для предопределенных типов, используя nameof()

Console.WriteLine(nameof(int)); //CS1525    Invalid expression term 'int'   

nameof (C # Reference)

Примечания

Поскольку аргумент должен быть выражением синтаксически, существует запрещены многие вещи, которые бесполезны для перечисления. Следующие Стоит отметить, что выдают ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...