Можно ли увеличить имя переменной? или альтернативный [дубликат]

Попробуйте использовать целочисленное деление вместо float-деления.

>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
2
задан Soner Gönül 30 November 2015 в 09:38
поделиться

5 ответов

Вы можете сделать это с помощью такой рефлексии:

        var myEmployees = new Employees();
        var properties = myEmployees.GetType().GetProperties();

        foreach (var field in properties)
        {
            field.SetValue(myEmployees, "NewValue");
        }

        // Print all field's values
        foreach (var item in properties)
        {
            Console.WriteLine(item.GetValue(myEmployees));
        }

В противном случае вы можете использовать список или словарь или создать новую структуру, которая сделает вас более гибкой и позволит вам контролировать больше свойств поле:

    struct FieldProperties
    {
        public string Name { get; set; }
        public string Value { get; set; }
        public string Type { get; set; }
        ...
    }


    List<FieldProperties> lst = new List<FieldProperties>();
0
ответ дан Ahmed Z. 15 August 2018 в 17:23
поделиться

Вы можете сделать это жестким (и не правильным, IMO) способом, используя отражение. Но если у вас есть 30 переменных, как это, измените свой подход: используйте List<string> или Dictionary <whateverKey, string>, чтобы сохранить все ваши поля

3
ответ дан Gian Paolo 15 August 2018 в 17:23
поделиться

Если вы действительно должны сделать это с помощью отражения, вы можете сделать это так:

var employees = new Employees();
var type = employees.GetType();

for (int i = 1; i <= 4; ++i)
    type.GetProperty("field"+i).SetValue(employees, "abcde");

Console.WriteLine(employees.field1); // Prints "abcde"

Как указывают другие люди, использование отражения таким образом кажется немного подозрительным. Похоже, вы должны делать это по-другому, например, используя Dictionary<string,string>.

1
ответ дан Matthew Watson 15 August 2018 в 17:23
поделиться
  • 1
    Обратите внимание, что это затрудняет поддержку вашего кода, потому что если вы измените имена или количество полей от 30 до 31, вы можете забыть изменить код цикла, и компилятор не предупредит вас об этом – Andrej Adamenko 30 November 2015 в 09:58
  • 2
    он выглядит хорошо, но у меня ошибка в методе setValue: никакой перегрузки для метода SetValue не принимает 2 аргумента. возможно, нужно добавить больше аргументов? – Tomer A 30 November 2015 в 09:59
  • 3
    @TomerA Этот код использует .Net 4.6. Если вы используете старую версию, просто передайте дополнительный параметр null в конце: type.GetProperty("field"+i).SetValue(employees, "abcde", null); – Matthew Watson 30 November 2015 в 10:06

Попробуйте этот подход (используя GetMembers () ), чтобы получить все члены класса и закодировать их.

Employees myEmployees = new Employees();
MemberInfo[] members = myType.GetMembers();

for (int i =0 ; i < members.Length ; i++)
{
    // Display name and type of the concerned member.
    Console.WriteLine( "'{0}' is a {1}", members[i].Name, members[i].MemberType);
}
0
ответ дан Paul Zahra 15 August 2018 в 17:23
поделиться

Вы можете попробовать использовать Reflection

Type type = typeof(Employees);
PropertyInfo pi =  this.GetType().GetProperty();
pi.SetField(this, value);

Вот ссылка MSDN: https://msdn.microsoft.com/en-us/library/ms173183.aspx

0
ответ дан Titan Chase 15 August 2018 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: