How do you retrieve the last element of an array in C#?
-
are you looking for how to retrieve the value stored in the last spot of the array, or the actual value of the index? – Nader Shirazie Jun 29 '09 at 05:59
-
2i mean the index value, that is, started from 0 to n – MAC Jun 29 '09 at 06:01
-
The title and content ask different questions. – Masea Jun 16 '20 at 04:53
-
Does this answer your question? [Get the first and last item of an array of strings](https://stackoverflow.com/questions/7387396/get-the-first-and-last-item-of-an-array-of-strings) – TylerH Jul 19 '22 at 21:45
13 Answers
LINQ provides Last():
csharp> int[] nums = {1,2,3,4,5};
csharp> nums.Last();
5
This is handy when you don't want to make a variable unnecessarily.
string lastName = "Abraham Lincoln".Split().Last();

- 2,555
- 2
- 18
- 9
-
2Last is nice but it is very specific to get only the last item. Does C# have something like slice that can be used like `slice(-2)` to get the last 2 or `slice(0,-2)` to get items from the start except the last 2? Then a function like Last would not be needed as one could just do `slice(-1)` as I'm used to do in other languages. – HMR Dec 22 '16 at 04:48
-
4@HMR Yes, see this: https://www.infoq.com/articles/cs8-ranges-and-recursive-patterns – Matthew Steven Monkan May 07 '19 at 07:48
int[] array = { 1, 3, 5 };
var lastItem = array[^1]; // 5

- 785
- 1
- 10
- 31

- 8,170
- 4
- 53
- 71
-
4Requires C# 8 and .Net Framework 4.8 or .Net Core 3. https://github.com/ashmind/SharpLab/issues/390 – jonyfries Aug 30 '21 at 12:48
The array has a Length
property that will give you the length of the array. Since the array indices are zero-based, the last item will be at Length - 1
.
string[] items = GetAllItems();
string lastItem = items[items.Length - 1];
int arrayLength = array.Length;
When declaring an array in C#, the number you give is the length of the array:
string[] items = new string[5]; // five items, index ranging from 0 to 4.

- 155,851
- 29
- 291
- 343
-
13This fails when the array has zero items, in which case `(items.Length - 1) == -1` – ftvs Dec 07 '12 at 02:57
-
9In C# 8 there is a new operator for indexing: `char[] arr = {'c', 'b', 'a'}; int a_last = arr[^1]; int b_second_last = arr[^2];` – Andrei Bozantan Sep 23 '20 at 15:54
New in C# 8.0 you can use the so-called "hat" (^) operator! This is useful for when you want to do something in one line!
var mystr = "Hello World!";
var lastword = mystr.Split(" ")[^1];
Console.WriteLine(lastword);
// World!
instead of the old way:
var mystr = "Hello World";
var split = mystr.Split(" ");
var lastword = split[split.Length - 1];
Console.WriteLine(lastword);
// World!
It doesn't save much space, but it looks much clearer (maybe I only think this because I came from python?). This is also much better than calling a method like .Last()
or .Reverse()
Read more at MSDN
Edit: You can add this functionality to your class like so:
public class MyClass
{
public object this[Index indx]
{
get
{
// Do indexing here, this is just an example of the .IsFromEnd property
if (indx.IsFromEnd)
{
Console.WriteLine("Negative Index!")
}
else
{
Console.WriteLine("Positive Index!")
}
}
}
}
The Index.IsFromEnd
will tell you if someone is using the 'hat' (^) operator

- 183
- 1
- 5
Use Array.GetUpperBound(0). Array.Length contains the number of items in the array, so reading Length -1 only works on the assumption that the array is zero based.

- 19,501
- 3
- 53
- 95
-
4
-
@mgttlinger, most of them are, but you can create non-zero-based arrays with http://msdn.microsoft.com/en-us/library/x836773a.aspx, or you may experience them when communicating with libraries written in other languages. – sisve Mar 21 '13 at 14:29
-
Awesome! Why isn't this up-voted (it's up to 3 with my vote at the time of this comment)? It's by far the most elegant, non-LINQ solution. – seebiscuit Feb 11 '14 at 15:00
-
1UPDATE: The GetUpperBound(0) function will only return an `int`. It may not return what the user expects for other numerical arrays, and not all for non-numerical arrays. That's why this isn't up-voted past 3. – seebiscuit Feb 11 '14 at 16:01
To compute the index of the last item:
int index = array.Length - 1;
Will get you -1 if the array is empty - you should treat it as a special case.
To access the last index:
array[array.Length - 1] = ...
or
... = array[array.Length - 1]
will cause an exception if the array is actually empty (Length is 0).

- 167,383
- 100
- 513
- 979
Also, starting with .NET Core 3.0 (and .NET Standard 2.1) (C# 8) you can use Index
type to keep array's indexes from end:
var lastElementIndexInAnyArraySize = ^1;
var lastElement = array[lastElementIndexInAnyArraySize];
You can use this index to get last array value in any length of array. For example:
var firstArray = new[] {0, 1, 1, 2, 2};
var secondArray = new[] {3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5};
var index = ^1;
var firstArrayLastValue = firstArray[index]; // 2
var secondArrayLastValue = secondArray[index]; // 5
For more information check documentation

- 8,170
- 4
- 53
- 71

- 4,856
- 1
- 18
- 31
-
1More on indices - A special value ^0 reduces to length of an array. So firstArray[^0] gives 'Index was outside the bounds of the array.' exception! – MBB Jun 02 '20 at 17:02
The following will return NULL if the array is empty, else the last element.
var item = (arr.Length == 0) ? null : arr[arr.Length - 1]

- 8,170
- 4
- 53
- 71

- 20,110
- 21
- 77
- 129
-
2This could also be written as `var item = (arr.Length == 0) ?? arr[arr.Length - 1]`. – Sep 25 '11 at 10:07
-
3@user215361 No, that is invalid C#. Your example will result in: `error CS0019: Operator '??' cannot be applied to operands of type 'bool' and 'int'` – Matthew Steven Monkan Mar 12 '19 at 01:56
Is this worth mentioning?
var item = new Stack(arr).Pop();

- 8,170
- 4
- 53
- 71

- 7,126
- 12
- 55
- 112
-
3
-
2StilI not slow enough, what about converting into xml and evaluating on sql server? – Antonín Lejsek Aug 08 '20 at 20:49
This is simplest and works on all versions.
int[] array = { 1, 3, 5 };
int last = array[array.Length - 1];
Console.WriteLine(last);
// 5

- 21
- 1
- 3
Array starts from index 0 and ends at n-1.
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4, 5 };
int length = arr.Length - 1; // starts from 0 to n-1
Console.WriteLine(length); // this will give the last index.
Console.Read();
}

- 2,371
- 5
- 14
- 26

- 101
- 5
static void Main(string[] args)
{
int size = 6;
int[] arr = new int[6] { 1, 2, 3, 4, 5, 6 };
for (int i = 0; i < size; i++)
{
Console.WriteLine("The last element is {0}", GetLastArrayIndex(arr));
Console.ReadLine();
}
}
//Get Last Index
static int GetLastArrayIndex(int[] arr)
{
try
{
int lastNum;
lastNum = arr.Length - 1;
return lastNum;
}
catch (Exception ex)
{
return 0;
}
}

- 1
- 1