Вы также можете использовать ярлык эха вместо того, чтобы печатать «эхо бла»; как показано ниже:
<form method="POST" action="<?=( Вы также можете использовать ярлык эха вместо того, чтобы печатать «эхо бла»; как показано ниже:
[110]SERVER['PHP_SELF'])?>">
Это можно сделать с помощью Reflection. Проверьте примеры FieldInfo и PropertyInfo .
Пример MSDN (немного изменен):
Type myType = typeof(TestStruct);
// Get the fields of TestStruct.
FieldInfo[] myFieldInfo =
myType.GetFields(
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
Console.WriteLine("\nThe fields of TestStruct are \n");
// Display the field information of TestStruct.
for(int i = 0; i < myFieldInfo.Length; i++)
{
Console.WriteLine("\nName : {0}", myFieldInfo[i].Name);
Console.WriteLine("Declaring Type : {0}", myFieldInfo[i].DeclaringType);
Console.WriteLine("IsPublic : {0}", myFieldInfo[i].IsPublic);
Console.WriteLine("MemberType : {0}", myFieldInfo[i].MemberType);
Console.WriteLine("FieldType : {0}", myFieldInfo[i].FieldType);
Console.WriteLine("IsFamily : {0}", myFieldInfo[i].IsFamily);
}
Я пока не могу добавлять комментарии, поэтому в ответ на SwDevMan81 немного вверху ^
Если вам нужно значение и у вас есть FieldInfo .. .
object val = myFieldInfo[i].GetValue(Obj);
Кроме того,
GetFields ()
возвращает переменные-члены. Флаги определяют, нужны ли вам общедоступные / частные / статические члены и т. Д.
GetProperties ()
возвращает свойства.
Хорошо, поэтому, используя информацию о сообщениях людей, у нас будет новый метод сравнения, который выглядит следующим образом:
public List Compare2(TestStruct inTestStruct)
{
List diffs = new List();
FieldInfo[] fields = this.GetType().GetFields();
FieldInfo[] fields2 = inTestStruct.GetType().GetFields();
for (int i = 0; i < fields.Length; i++)
{
object value1 = fields[i].GetValue(this);
object value2 = fields2[i].GetValue(inTestStruct);
if (!value1.Equals(value2))
{
diffs.Add(new Diff(fields[i].Name, value1, value2));
}
}
return diffs;
}
Похоже, это значительно уменьшает размер функции сравнения, но я все же иметь весь класс Diffs и дополнительный код. Есть ли еще способ попроще?
Linq ?
public List<string> Compare(TestStruct x, TestStruct y) {
return (
from l1 in x.GetType().GetFields()
join l2 in y.GetType().GetFields() on l1.Name equals l2.Name
where !l1.GetValue(x).Equals(l2.GetValue(y))
select string.Format("{0} {1} {2}", l1.Name, l1.GetValue(x), l2.GetValue(y))
).ToList();
}