Получить коллекцию значений из свойств структуры const - PullRequest
11 голосов
/ 03 мая 2011

У меня есть структура, которая выглядит следующим образом:

public struct MyStruct
{
    public const string Property1 = "blah blah blah";
    public const string Property2 = "foo";
    public const string Property3 = "bar";
}

Я хочу программно получить коллекцию значений const свойств MyStruct.Пока я пробовал это безуспешно:

var x = from d in typeof(MyStruct).GetProperties()
                    select d.GetConstantValue();

У кого-нибудь есть идеи?Спасибо.

РЕДАКТИРОВАТЬ : Вот что в итоге сработало для меня:

from d in typeof(MyStruct).GetFields()
select d.GetValue(new MyStruct());

Спасибо Джонатану Хенсону и JaredPar за всю вашу помощь!

Ответы [ 3 ]

15 голосов
/ 03 мая 2011

Это поля, а не свойства, поэтому вам нужно использовать метод GetFields

    var x = from d in typeof(MyStruct).GetFields()
            select d.GetRawConstantValue();

Также я считаю, что вы ищете метод GetRawConstantValue вместо GetConstantValue

3 голосов
/ 14 марта 2017

Вот немного другая версия для получения фактического массива строк:

string[] myStrings = typeof(MyStruct).GetFields()
                     .Select(a => a.GetRawConstantValue()
                     .ToString()).ToArray();
2 голосов
/ 03 мая 2011

GetProperties вернет ваши свойства. Свойства имеют методы get и / или set.

На данный момент ваша структура не имеет свойств. Если вы хотите свойства, попробуйте:

private const string property1 = "blah blah";

public string Property1
{
    get { return property1; }
}

Более того, вы можете использовать GetMembers () для возврата всех ваших участников, это вернет ваши «свойства» в вашем текущем коде.

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