using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
public sealed class Variable {
public string Name { get; }
public Variable(string name) {
public static class VariableCollectionExtensions {
public static IEnumerable<string> GetUniqueNames(this IEnumerable<Variable> variables) {
var names = variables.Select(v => v.Name.Split('-').First()).ToList();
return names?.Distinct().OrderBy(n => names.IndexOf(n));
public static void Main() {
var variables = new[] { new Variable("var1-1"), new Variable("var2"), new Variable("var1-2") };
var expected = new[] { "var1", "var2" };
var actual = variables.GetUniqueNames().ToList();
CollectionAssert.AreEqual(actual, expected);