Can I use an anonymous type as a return type in a Function, and then stuff that returned value into an array or collection of some sort whilst also adding an additional fiel
Just use and ArrayList
public static ArrayList GetMembersItems(string ProjectGuid)
{
ArrayList items = new ArrayList();
items.AddRange(yourVariable
.Where(p => p.yourproperty == something)
.ToList());
return items;
}
No you can't return an anonymous type from the method. For more info read this MSDN doc. Use class
or struct
instead of an anonymous
type.
You should read blog post - Horrible grotty hack: returning an anonymous type instance
If you are using framework 4.0 then you can return List<dynamic>
but be careful to access the properties of anonymous object.
private List<dynamic> GetRowGroups(string columnName)
{
var groupQuery = from table in _dataSetDataTable.AsEnumerable()
group table by new { column1 = table[columnName] }
into groupedTable
select new
{
groupName = groupedTable.Key.column1,
rowSpan = groupedTable.Count()
};
return groupQuery.ToList<dynamic>();
}
No, you can't return an anonymous type directly, but you can return it using an impromptu interface. Something like this:
public interface IMyInterface
{
string GroupName { get; }
int RowSpan { get; }
}
private IEnumerable<IMyInterface> GetRowGroups()
{
var list =
from item in table
select new
{
GroupName = groupedTable.Key.column1,
RowSpan = groupedTable.Count()
}
.ActLike<IMyInterface>();
return list;
}
From C#7 you can return a list of tuples:
private IEnumerable<(string, string)> GetRowGroups(string columnName)
{
return from table in _dataSetDataTable.AsEnumerable()
group table by new { column1 = table[columnName] }
into groupedTable
select (groupedTable.Key.column1, groupedTable.Count());
}
You can even give the members of the tuple names:
private IEnumerable<(string groupName, string rowSpan)> GetRowGroups(string columnName)
{
return from table in _dataSetDataTable.AsEnumerable()
group table by new { column1 = table[columnName] }
into groupedTable
select (groupedTable.Key.column1, groupedTable.Count());
}
However you need System.ValueTuple from the Nuget Package Manager.
Anyway I suggest to give things a clear name that includes what their purpose is, in particular when this is part of a public API. Having said this you should consider to create a class that holds those properties and return a list of that type.
This is a very popular question. In general you cannot return an anonymous type due to the requirement of strong typing. However there are a couple of workarounds.
Use object
, not var
. You'll have to use reflection to access the properties outside the scope of the anonymous type though.
i.e.
private object GetRowGroups(string columnName)
...
var RowGroupList = new List<object>();
...