Попробуйте использовать целочисленное деление вместо float-деления.
>>> 15511210043330985984000000 / (479001600 * 6227020800)
5200299.999999999
>>> 15511210043330985984000000 // (479001600 * 6227020800)
5200300
Вы можете сделать это с помощью такой рефлексии:
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>();
Вы можете сделать это жестким (и не правильным, IMO) способом, используя отражение. Но если у вас есть 30 переменных, как это, измените свой подход: используйте List<string>
или Dictionary <whateverKey, string>
, чтобы сохранить все ваши поля
Если вы действительно должны сделать это с помощью отражения, вы можете сделать это так:
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>
.
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);
}
Вы можете попробовать использовать Reflection
Type type = typeof(Employees);
PropertyInfo pi = this.GetType().GetProperty();
pi.SetField(this, value);
Вот ссылка MSDN: https://msdn.microsoft.com/en-us/library/ms173183.aspx