Классы, сгенерированные LINQ to SQL, хранят данные в приватных полях (имя которых начинается с подчеркивания), в то время как ваш пример класса предоставляет данные в открытых полях.Перегрузка используемого вами метода GetFields
возвращает только открытые поля, поэтому он будет работать для вашего класса, но не для классов, сгенерированных LINQ to SQL.
Хорошей практикой в .NET является предоставление данныхЧто касается общедоступных свойств, то лучшим способом исправить ваш метод будет переключение с использования полей на использование свойств.Вам нужно изменить GetFields
на GetProperties
(что возвращает PropertyInfo[]
).Затем он будет работать для классов, сгенерированных LINQ to SQL, и для классов, которые вы пишете так (используя автоматические свойства в C # 3.0):
public class Mehmet {
public string FirstName { get; set; }
public string LastName { get; set; }
}
В качестве альтернативы вы можете использовать как GetFields
, так и GetProperties
но поскольку хорошо разработанный класс не должен содержать открытых полей, в этом нет необходимости.
Кроме того, ваш вложенный foreach использует GetField
немного странным образом:
foreach (FieldInfo f in fields)
result.Add((typeOfT).GetField(f.Name).GetValue(t).ToString());
// You don't need 'GetFied' because 'f' is the field you're looking for:
foreach (FieldInfo f in fields)
result.Add(f.GetValue(t).ToString());
ДляPropertyInfo
, это будет выглядеть одинаково (вместо этого вы будете использовать PropertyInfo
).