Это походит IllegalArgumentException
, требуется, если бы Вы не хотите null
быть позволенным значением, и эти NullPointerException
был бы брошен, если бы Вы пробовали к использование переменная, которая оказывается null
.
Сделайте анонимный тип в класс ...
public class Person
{
public Person() {
}
public String Name { get; set; }
public DateTime DOB { get; set; }
}
Person p =
from person in db.People
where person.Id = 1
select new Person {
Name = person.Name,
DOB = person.DateOfBirth
}
Использование var не делает его анонимным. Использование var означает, что эта переменная должна иметь тип, доступный в правой части присваивания. Это просто короткая рука. Если объект справа - реальный класс, переменная будет принадлежать к этому типу.
Например:
var person = new Person { Name = "bob" };
Переменная person имеет тип Person, даже несмотря на то, что в ней использовалось ключевое слово var.
Анонимные типы создаются с использованием нового {Name = ...}. В данном случае это новый анонимный класс. Единственное, чему вы можете присвоить его, это переменная, определенная с помощью var (или object), поскольку имя для использования не существует.
Например:
var person = new { Name = "bob" };
В этом случае person - это анонимный тип, определенный во время выполнения.
Обычно, как говорит @Chalkey, если вы хотите передать результат обратно в другой метод, используйте именованный тип, а не анонимный.
Вы не можете ввести какой-либо метод в C # как явный тип анонимных типов. Они не могут быть, так сказать, "названы" и, следовательно, не могут появляться в сигнатурах метаданных.
Если вы действительно хотите вернуть значение, которое является анонимным типом, есть 2 варианта
Анонимные типы на самом деле не предназначались для передачи таким образом. В тот момент, когда вам нужно передать их между вашими функциями таким образом, вам лучше явно определить тип.
Джон Скит написал блог о том, как это сделать, вполне справедливо названный Horribly Grotty Hack . Как следует из названия, вам действительно не следует искать способы вернуть анонимный тип. Вместо этого вы должны создать тип, который может быть возвращен, поскольку это правильный способ реализации этой функции.
Поэтому я рекомендую вам создать конкретное определение типа, который будет возвращен, а затем заполнить его в своем запросе для него. подлежит возврату.
Это отчасти зависит от того, как вызывающий код будет использовать данные.
Если вы выполняете простую привязку данных, вас действительно не волнует тип (т.е. 'не нужно явно обращаться к свойствам в вашем коде C #), вы можете передать результаты обратно как IEnumberable.
В большинстве случаев привязки данных вы в любом случае вызываете свойства по имени, через магические строки, поэтому точный тип не в любом случае имеет значение.
В противном случае вам нужно преобразовать анонимный тип в именованный тип.
Если вам нужно передать результаты в большом приложении, вы можете использовать Словарь. Да, у вас есть накладные расходы при забросе, но, по крайней мере, вы уменьшаете количество выбрасываемых предметов.