Почему я не могу передать анонимный тип в качестве параметра функции? - PullRequest
4 голосов
/ 08 июля 2010

Я пытался сделать что-то вроде ниже, но это не работает. Почему .NET не позволяет мне сделать это?

private void MyFunction(var items)
{
 //whatever
}

Ответы [ 3 ]

7 голосов
/ 08 июля 2010

Начиная с Visual C # 3.0, переменные, объявленные в области действия метода, могут иметь неявный тип var.Локально типизированная локальная переменная строго типизирована, как если бы вы сами объявили тип, но компилятор определяет тип.Следующие два объявления i функционально эквивалентны:

var i = 10; // implicitly typed
int i = 10; //explicitly typed

Другими словами, ключевое слово var разрешено только для локально переменных области действия.

Источник .

Немного больше информации здесь .Как правило, при использовании var вы также должны инициализировать переменную значением в той же строке, чтобы компилятор знал, какой это тип.

2 голосов
/ 08 июля 2010

Строго говоря, вы можете передать анонимный тип в качестве аргумента, но вы не можете получить к нему доступ строго типизированным способом.Использовать вывод обобщенного аргумента типа:

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);
}
1 голос
/ 08 июля 2010

C # - строго типизированный язык, добавление анонимных типов не изменило этого.

Конечно, вы можете передать в функцию переменную типа object (или массив объектов),

private void MyFunction(object items)
{
  //Typecast to whatever you like here....But frankly this is a "code smell"
}

Возможно, вы могли бы рассказать нам, чего вы пытаетесь достичь, возможно, есть лучший дизайн.

...