Reputation: 2026
I need a two column list like:
List<int,string> mylist= new List<int,string>();
it says
using the generic type
System.collection.generic.List<T>
requires 1 type arguments.
Upvotes: 66
Views: 304333
Reputation: 8573
With the new ValueTuple
from C# 7 (VS 2017 and above), there is a new solution:
List<(int,string)> mylist= new List<(int,string)>();
Which creates a list of ValueTuple
type. If you're targeting .NET Framework 4.7+ or .NET/.NET Core, it's native, otherwise you have to get the ValueTuple package from nuget.
It's a struct opposing to Tuple
, which is a class. It also has the advantage over the Tuple
class that you could create a named tuple, like this:
var mylist = new List<(int myInt, string myString)>();
That way you can access like mylist[0].myInt
and mylist[0].myString
Upvotes: 41
Reputation: 82136
You could use an immutable struct
public struct Data
{
public Data(int intValue, string strValue)
{
IntegerData = intValue;
StringData = strValue;
}
public int IntegerData { get; private set; }
public string StringData { get; private set; }
}
var list = new List<Data>();
Or a KeyValuePair<int, string>
using Data = System.Collections.Generic.KeyValuePair<int, string>
...
var list = new List<Data>();
list.Add(new Data(12345, "56789"));
Upvotes: 49
Reputation: 31
List<Tuple<string, DateTime, string>> mylist = new List<Tuple<string, DateTime,string>>();
mylist.Add(new Tuple<string, DateTime, string>(Datei_Info.Dateiname, Datei_Info.Datum, Datei_Info.Größe));
for (int i = 0; i < mylist.Count; i++)
{
Console.WriteLine(mylist[i]);
}
Upvotes: 3
Reputation: 81
Use C# Dictionary datastructure it good for you...
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("one", 1);
dict.Add("two", 2);
You can retrieve data from Ditionary in a simple way..
foreach (KeyValuePair<string, int> pair in dict)
{
MessageBox.Show(pair.Key.ToString ()+ " - " + pair.Value.ToString () );
}
For more example using C# Dictionary... C# Dictionary
Navi.
Upvotes: 7
Reputation: 22578
Since your example uses a generic List
, I assume you don't need an index or unique constraint on your data. A List
may contain duplicate values. If you want to insure a unique key, consider using a Dictionary<TKey, TValue>()
.
var list = new List<Tuple<int,string>>();
list.Add(Tuple.Create(1, "Andy"));
list.Add(Tuple.Create(1, "John"));
list.Add(Tuple.Create(3, "Sally"));
foreach (var item in list)
{
Console.WriteLine(item.Item1.ToString());
Console.WriteLine(item.Item2);
}
Upvotes: 21
Reputation: 1250
For that, you could use a Dictionary
where the int
is the key.
new Dictionary<int, string>();
If you really want to use a list, it could be a List<Tuple<int,string>>()
but, Tuple
class is readonly, so you have to recreate the instance to modifie it.
Upvotes: 2
Reputation: 13600
Not sure about your specific scenario, but you have three options:
1.) use Dictionary<..,..>
2.) create a wrapper class around your values and then you can use List
3.) use Tuple
Upvotes: 5
Reputation: 38456
Depending on your needs, you have a few options here.
If you don't need to do key/value lookups and want to stick with a List<>
, you can make use of Tuple<int, string>
:
List<Tuple<int, string>> mylist = new List<Tuple<int, string>>();
// add an item
mylist.Add(new Tuple<int, string>(someInt, someString));
If you do want key/value lookups, you could move towards a Dictionary<int, string>
:
Dictionary<int, string> mydict = new Dictionary<int, string>();
// add an item
mydict.Add(someInt, someString);
Upvotes: 88