I've seen this line in a code snipped and was wondering of the use of it
var item = new List<int>.Enumerator();
What does this do?
I've seen this line in a code snipped and was wondering of the use of it
var item = new List<int>.Enumerator();
What does this do?
It is something quite useless and wrong...
The first question should be what is the List<T>.Enumerator... It is a support class of List<T> that implements the IEnumerator<T> interface (the interface used for enumerating a collection, used for example by the foreach). For performance reasons it is a struct instead of being a class. Being a struct is has a predefined public parameterless constructor (the one you are using). It has even an internal constructor with one parameter (List<T> list) that sets some necessary internal fields (the most important is a reference to the List<> that created it). This constructor is used by List<>.GetEnumerator().
Now, if you do what you wrote, you will create an "incomplete" Enumerator. The item.Current will "work" (returning a default(T)) but if you try to do a item.MoveNext() you'll get a NullReferenceException. If you want an IEnumerator for an "empty" collection, it would be better to do:
var item = Enumerable.Empty<int>().GetEnumerator();
For the reason why List<T>.Enumerator is public instead of being private or internal... It is a little more complex. List<T> implements IEnumerable<T> and IEnumerable, so it must have at least two methods with these signatures:
IEnumerator<T> IEnumerable<T>.GetEnumerator()
and
IEnumerator IEnumerable.GetEnumerator()
but for performance reasons it implements them as explicit implementation (so hiding them), and implements a third method:
public Enumerator GetEnumerator()
that returns a struct Enumerator... now, thanks to how foreach works, this third public method will be the one used by foreach. Why this? Because a struct used through one of its interfaces (IEnumerator<T> or IEnumerator in this case) is boxed (something that slows it a little)... but if the struct is used directly (through its public Enumerator GetEnumerator()) method, there is no boxing and the performance is a little better... Microsoft programmers gave their 110% on List<> performances :-)
I went to code to find out more , This is what i found 
so var item = new List<int>.Enumerator(); return you instance of Enumerable structure , which is going to map to your list. As Enumerator is structure it will initialize its member with default value , in this case based on code it will initialize list to null. for detail you can see code of list.
In this case there is no list instance exist , so if you access any method like this
var item = new List<int>.Enumerator();
item.Currnet or item.MovNext()
throws exception mostly or default int you have to tried that out.
In detail : https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
public struct Enumerator : IEnumerator<T>, System.Collections.IEnumerator
{
private List<T> list;
private int index;
private int version;
private T current;
internal Enumerator(List<T> list) {
this.list = list;
index = 0;
version = list._version;
current = default(T);
}
public void Dispose() {
}
public bool MoveNext() {
List<T> localList = list;
if (version == localList._version && ((uint)index < (uint)localList._size))
{
current = localList._items[index];
index++;
return true;
}
return MoveNextRare();
}
private bool MoveNextRare()
{
if (version != list._version) {
ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);
}
index = list._size + 1;
current = default(T);
return false;
}