Я пытался сделать что-то вроде ниже, но это не работает. Почему .NET не позволит мне это сделать?Почему я не могу передать анонимный тип в качестве параметра функции?
private void MyFunction(var items)
{
//whatever
}
Я пытался сделать что-то вроде ниже, но это не работает. Почему .NET не позволит мне это сделать?Почему я не могу передать анонимный тип в качестве параметра функции?
private void MyFunction(var items)
{
//whatever
}
Начиная с Visual C# 3.0, переменные, объявленные в методе сферы могут иметь неявный тип вар. Неявно типизированная локальная переменная строго типизирована так же, как если бы вы объявили тип самостоятельно, но компилятор определяет тип. Следующие два заявления I функционально эквивалентны:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
В других случаях, var
ключевое слово разрешается только локально контекстные переменные.
Немного больше информации here. В принципе, при использовании var
вы также должны инициализировать переменную до значения в той же строке, чтобы компилятор знал, какой тип он есть.
Интересно, будет ли здесь использовать любое ключевое слово dynamic ... –
@VincentVancalbergh Я думаю, что 'dynamic' обеспечит использование этого OP. – Nate
C# - строго типизированный язык, добавление анонимных типов не изменило этого.
Конечно, можно передать переменную типа объекта (или массив объектов) к функции,
private void MyFunction(object items)
{
//Typecast to whatever you like here....But frankly this is a "code smell"
}
Может быть, вы могли бы сказать нам, что вы пытаетесь достичь, может быть, есть лучший дизайн.
Строго говоря, вы можете передавать анонимный тип в качестве аргумента, но вы не можете получить к нему доступ строго типизированным способом. Используйте аргумент типа generic:
public static int Foo<T>(T obj)
{
return obj.GetHashCode();
}
public static void Main()
{
var anonymousType = new { Id = 2, Name = "Second" };
var value = Foo(anonymousType);
}
Просто FYI переменные, определенные с помощью 'var', неявно напечатаны, а не анонимны. Анонимные типы - совершенно другая игра в мяч. 'var' может использоваться с анонимными типами, но это не означает, что объект * является * анонимным типом. – Nate