En mi código tengo:
private static readonly ValueTuple<string, string>[] test = {("foo", "bar"), ("baz", "foz")};Pero cuando compilo mi código, obtengo:
TypoGenerator.cs(52,76): error CS1026: Unexpected symbol `,', expecting `)' TypoGenerator.cs(52,84): error CS1026: Unexpected symbol `)', expecting `)' TypoGenerator.cs(52,94): error CS1026: Unexpected symbol `,', expecting `)' TypoGenerator.cs(52,103): error CS1026: Unexpected symbol `)', expecting `)' TypoGenerator.cs(117,42): error CS1525: Unexpected symbol `(' TypoGenerator.cs(117,58): error CS1525: Unexpected symbol `['¿Cuál es la forma correcta de crear e inicializar una matriz de ValueTuples?
Intente crear una instancia de matriz con new e instancias de tupla con new palabra clave
private static readonly ValueTuple<string, string>[] test = new ValueTuple<string, string>[]{ new ValueTuple<string, string>("foo", "bar"), new ValueTuple<string, string>("baz", "foz") };o con sintaxis de tupla C#7
private static readonly ValueTuple<string, string>[] test = new ValueTuple<string, string>[]{ ("foo", "bar"), ("baz", "foz") };Actualizar:
En este momento, todas las declaraciones de la pregunta y esta respuesta funcionan bien con Rider 2017.1 build #RD-171.4456.1432 y .NET Core 1.0.4. El más simple es el que @ZevSpitz mencionó en los comentarios y tiene el siguiente aspecto:
private static readonly (string, string)[] test = {("foo", "bar"), ("baz", "foz")}; No es necesario agregar un tipo específico para ValueTuple . Tenga en cuenta que para .NET Core se debe instalar el paquete System.ValueTuple .
Tres breves ejemplos del uso de la sintaxis de C# 7 de la declaración e inicialización de la matriz ValueTuple:
(int Alpha, string Beta)[] array1 = { (Alpha: 43, Beta: "world"), (99, "foo") }; (int Alpha, string Beta)[] array2 = { (43, "world"), (99, "foo") }; (int, string)[] array3 = { (43, "world"), (99, "foo") }; // Item1, Item2, ...Todos estos se compilan bien en VS2017
Linq puede ser una buena manera de crear arreglos de ValueTuples, también:
var foo = Enumerable.Range(1,10).Select(z=> (Alpha: 43, Beta: "world")).ToArray();Puedes crear una nueva tupla como esta
var logos = new (string Name, string Uri)[] { ("White", "white.jpg"), ("Black", "black.jpg"), };