diff --git a/Luento10/ArvotJaViitteet/ArvotJaViitteet.cs b/Luento10/ArvotJaViitteet/ArvotJaViitteet.cs
new file mode 100644
index 0000000000000000000000000000000000000000..1aeb67cdffce43f508b7c77d3cf453b1aa39a8a5
--- /dev/null
+++ b/Luento10/ArvotJaViitteet/ArvotJaViitteet.cs
@@ -0,0 +1,40 @@
+using System;
+
+/// <summary>
+/// Luento 10. Arvopohjaiset ja viitepohjaiset muuttujat
+/// </summary>
+public class ArvotJaViitteet
+{
+    /// <summary>
+    /// Arvopohjaiset ja viitepohjaiset muuttujat
+    /// </summary>
+    public static void Main()
+    {
+        int[] taulukko1 = { 1, 2, 3 };
+        //Console.WriteLine(taulukko1);
+        int[] taulukko2 = taulukko1;
+        taulukko2[1] = 4;
+        
+        // Tätä ei nähty luennolla. Tarkoitus oli näyttää tämä, mutta unohdin. 
+        // Sama tehtiin Pythonissa ja ajatus oli näyttää, että 
+        // viite- ja arvopohjaisten muuttujien idea on hyvin samantapainen eri kielissä. 
+        Console.WriteLine($"Eka alkio nyt: {taulukko1[0]}");
+        Muuta(taulukko1);
+        Console.WriteLine($"Eka alkio Muuta-funktion kutsumisen jälkeen: {taulukko1[0]}");
+
+        int a = 3;
+        Console.WriteLine($"Arvopohjainen muuttuja aluksi: {a}");
+        Muuta(a);
+        Console.WriteLine($"Arvopohjainen muuttuja Muuta-funktion kutsumisen jälkeen: {a}");
+    }
+
+    public static void Muuta(int luku)
+    {
+        luku = 1000;
+    }
+
+    public static void Muuta(int[] t)
+    {
+        t[0] = 1000;
+    }
+}
\ No newline at end of file
diff --git a/Luento10/ArvotJaViitteet/ArvotJaViitteet.csproj b/Luento10/ArvotJaViitteet/ArvotJaViitteet.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0
--- /dev/null
+++ b/Luento10/ArvotJaViitteet/ArvotJaViitteet.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net8.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>
diff --git a/Luento10/Luento10.pdf b/Luento10/Luento10.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..07eaa8f29c80ca4ea0455fe06c1d03b0c587bb1a
Binary files /dev/null and b/Luento10/Luento10.pdf differ
diff --git a/Luento10/Luento10.sln b/Luento10/Luento10.sln
new file mode 100644
index 0000000000000000000000000000000000000000..d25864c100a435658438824e11f36ef2ff859df6
--- /dev/null
+++ b/Luento10/Luento10.sln
@@ -0,0 +1,29 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Taulukot", "Taulukot\Taulukot.csproj", "{0FC203C8-42F6-4D00-86E3-E6A17363798C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArvotJaViitteet", "ArvotJaViitteet\ArvotJaViitteet.csproj", "{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TaulukotTest", "TaulukotTest\TaulukotTest.csproj", "{DF748CEF-0034-4407-9D73-12514497335D}"
+EndProject
+Global
+  GlobalSection(SolutionConfigurationPlatforms) = preSolution
+    Debug|Any CPU = Debug|Any CPU
+    Release|Any CPU = Release|Any CPU
+  EndGlobalSection
+  GlobalSection(ProjectConfigurationPlatforms) = postSolution
+    {0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.Build.0 = Release|Any CPU
+    {C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.Build.0 = Release|Any CPU
+    {DF748CEF-0034-4407-9D73-12514497335D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+    {DF748CEF-0034-4407-9D73-12514497335D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+    {DF748CEF-0034-4407-9D73-12514497335D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+    {DF748CEF-0034-4407-9D73-12514497335D}.Release|Any CPU.Build.0 = Release|Any CPU
+  EndGlobalSection
+EndGlobal
diff --git a/Luento10/Luento10.sln.ctbackup b/Luento10/Luento10.sln.ctbackup
new file mode 100644
index 0000000000000000000000000000000000000000..c9246afe9bf027d9c8c2e19ffd056489aeef52a7
--- /dev/null
+++ b/Luento10/Luento10.sln.ctbackup
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Taulukot", "Taulukot\Taulukot.csproj", "{0FC203C8-42F6-4D00-86E3-E6A17363798C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ArvotJaViitteet", "ArvotJaViitteet\ArvotJaViitteet.csproj", "{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0FC203C8-42F6-4D00-86E3-E6A17363798C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C05BE3D5-EB6E-443F-AAC7-08E6CBFF0F23}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal
diff --git a/Luento10/Merkkijonot/Merkkijonot.cs b/Luento10/Merkkijonot/Merkkijonot.cs
new file mode 100644
index 0000000000000000000000000000000000000000..0acf4af2cd46895de877e488ed9b0581c7cab3e3
--- /dev/null
+++ b/Luento10/Merkkijonot/Merkkijonot.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+
+/// @author 
+/// @version 
+/// <summary>
+/// Luento 10, lyhyt katsaus StringBuilder-merkkijonoon
+/// </summary>
+public class Merkkijonot
+{
+    /// <summary>
+    /// Alustetaan pari StringBuilderia
+    /// </summary>
+    public static void Main()
+    {
+    }
+}
\ No newline at end of file
diff --git a/Luento10/Merkkijonot/Merkkijonot.csproj b/Luento10/Merkkijonot/Merkkijonot.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..df22a1ba07d539b07cf0adbaa6457daadeb433db
--- /dev/null
+++ b/Luento10/Merkkijonot/Merkkijonot.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net7.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>
diff --git a/Luento10/Taulukot/Taulukot.cs b/Luento10/Taulukot/Taulukot.cs
new file mode 100644
index 0000000000000000000000000000000000000000..ed9e24f9ca317254219a04e67ca49d1698cc7df2
--- /dev/null
+++ b/Luento10/Taulukot/Taulukot.cs
@@ -0,0 +1,199 @@
+using System;
+
+
+#region Henkilon tiedot voitaisiin tallentaa esimerkiksi näin (tämän luennon ulkopuolista asiaa)
+
+public class Henkilo
+{
+    public string Nimi { get; set; }
+    public int Syntymavuosi { get; set; }
+    public string Osoite { get; set; }
+    public string Puhelin { get; set; }
+    public string Email { get; set; }
+    public string[] Harrastukset { get; set; }
+    public double TilinSaldo { get; set; }
+
+    // Henkilöllä on myös metodeja, kuten TulostaTiedot(), LaskeIka(), jne.
+    // Opimme luokista lisää seuraavalla viikolla
+}
+
+#endregion
+
+/// <summary>
+/// Luento 10. Taulukot
+/// </summary>
+public class Taulukot
+{
+    /// <summary>
+    /// Vielä taulukoista
+    /// </summary>
+    public static void Main()
+    {
+        // Muistutus/tarkennus: Taulukoiden arvojen tulisi liittyä toisiinsa ja
+        // olla "samaa kategoriaa" (esim. lämpötilat, luennolle osallistujien nimet,
+        // lumiukon pallot, ...)
+        double[] lampotilat = { -1.0, 1.0, 2.0, -15.5, -14.5, -20.0, -30.0 };
+
+        // double[] henkilonTiedot = { 42.1, 183.0, 75.0, -10.0 };
+        // Tällä tavalla tietojen tallentaminen ei ole suositeltavaa.
+        // Tähän tarkoitukseen paremmin sopivat luokat, tietueet tai monikot
+
+        // Esimerkki 1: Taulukon alkioilla on kiinteä tyyppi, kuten muillakin muuttujilla
+        // string[] henkilot = { "Antti-Jussi", "Jonne", "Tuomo", 4 };
+        // int[] luvut = { 3, 2, 1, "Jono" };
+        // var luvut = new int[] { 3, 2, 1, "Jono"};
+
+        // Esimerkki 2: Taulukon sisältöä voi kuitenkin muuttaa.
+        int[] luvut = { 1, 2, 3, 5, 2, -1, 2 };
+        luvut[0] = 5;
+        Console.WriteLine(luvut[0]);
+
+        // Esimerkki 3: Alkioiden vaihto (ns. swap)
+        luvut[0] = 2;
+        luvut[6] = 1;
+        Console.WriteLine($"Ekassa on nyt {luvut[0]} ja vikassa {luvut[6]}");
+        // Mikä on taulukon viimeisessä paikassa oleva alkio?
+        int temp = luvut[luvut.Length - 1];
+        // Kopioidaan ekasta paikasta luku viimeiseen
+        luvut[luvut.Length - 1] = luvut[0];
+        // Uudessa C#:ssa onnistuu myös näin:
+        // luvut[^1] = luvut[0];
+
+        luvut[0] = temp;
+        Console.WriteLine($"Ekassa on nyt {luvut[0]} ja vikassa {luvut[6]}");
+
+        // Esimerkki 4: TulostaJos(luvut, 1)
+        TulostaJos(luvut, 1);
+
+        // Esimerkki 5: MontakoLukuaEnnenNollaa(luvut)
+        int[] luvut2 = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
+        int ennenNollaa = MontakoLukuaEnnenNollaa(luvut2);
+
+        // Esimerkki 6: Negatiivisten summa
+        double[] luvut3 = { -1.5, -2.0, 0, 2, 5, -3 };
+        double summa = NegatiivistenSumma(luvut3);
+        Console.WriteLine($"Negatiivisten lukujen summa on {summa}");
+
+        // Esimerkki 7: Niiden merkkijonojen määrä, joista löytyy kirjain 'a'
+        string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
+        int nimetJoissaA = KuinkaMonessaEsiintyy(nimet, 'a');
+    }
+
+    /// <summary>
+    /// Kuinka monessa merkkijonossa esiintyy etsittävä kirjain
+    /// </summary>
+    /// <param name="jonot">Merkkijonot</param>
+    /// <param name="etsittavaMerkki">Etsittävä merkki</param>
+    /// <returns>Jonojen lukumäärä</returns>
+    /// <example>
+    /// <pre name="test">
+    /// string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
+    /// KuinkaMonessaEsiintyy(nimet, 'a') === 3;
+    /// KuinkaMonessaEsiintyy(nimet, 'b') === 0;
+    /// KuinkaMonessaEsiintyy(nimet, 'A') === 3;
+    /// KuinkaMonessaEsiintyy(new string[]{ }, 'a') === 0;
+    /// </pre>
+    /// </example>
+    public static int KuinkaMonessaEsiintyy(string[] jonot, char etsittavaMerkki)
+    {
+        int monessako = 0;
+        foreach (string jono in jonot)
+        {
+            if (jono.ToLower().IndexOf(char.ToLower(etsittavaMerkki)) >= 0)
+            {
+                monessako++;
+            }
+        }
+
+        return monessako;
+    }
+
+    /// <summary>
+    /// Negatiivisten lukujen summa
+    /// </summary>
+    /// <param name="luvut">Luvut</param>
+    /// <returns>Summa</returns>
+    public static double NegatiivistenSumma(double[] luvut)
+    {
+        double summa = 0.0;
+        for (int i = 0; i < luvut.Length; i++)
+        {
+            // Tutkitaan onko alkion arvo negatiivinen
+            if (luvut[i] < 0)
+            {
+                summa += luvut[i];
+            }
+        }
+
+        return summa;
+    }
+
+    /// <summary>
+    /// Montako lukua on ennen nollaa.
+    /// </summary>
+    /// <param name="luvut">Luvut</param>
+    /// <returns>Montako ennen nollaa</returns>
+    /// <example>
+    /// <pre name="test">
+    /// int[] luvut = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
+    /// MontakoLukuaEnnenNollaa(luvut) === 7;
+    /// MontakoLukuaEnnenNollaa(new int[] { }) === 0;
+    /// MontakoLukuaEnnenNollaa(new int[] { 3, 2, 1 }) === 3;
+    /// MontakoLukuaEnnenNollaa(new int[] { 0, 3, 2, 1 }) === 0;
+    /// </pre>
+    /// </example>
+    public static int MontakoLukuaEnnenNollaa(int[] luvut)
+    {
+        int montakoLukua = 0;
+        foreach (int luku in luvut)
+        {
+            if (luku == 0) break;
+            else montakoLukua++;
+        }
+
+        return montakoLukua;
+    }
+
+    /// <summary>
+    /// Tulosta luku mikäli se mätsää etsittävään lukuun
+    /// </summary>
+    /// <param name="luvut">Luvut</param>
+    /// <param name="etsittavaLuku">Etsittävä luku</param>
+    public static void TulostaJos(int[] luvut, int etsittavaLuku)
+    {
+        // Käydään läpi jokainen alkio taulukosta "luvut"
+        // Jos alkion arvo on täsmälleen "etsittavaLuku"-parametrin arvo
+        // Tulostetaan se
+        for (int i = 0; i < luvut.Length; i++)
+        {
+            if (luvut[i] == etsittavaLuku)
+            {
+                Console.WriteLine(luvut[i]);
+            }
+        }
+    }
+
+    /// <summary>
+    /// Kuinka monesta merkkijonosta löytyy etsittävä kirjain
+    /// </summary>
+    /// <param name="jonot">Jonot</param>
+    /// <param name="etsittavaMerkki">Etsittävä merkki</param>
+    /// <returns>Sopivien merkkijonojen määrä</returns>
+    /// <example>
+    /// <pre name="test">
+    /// string[] jonot = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo" };
+    /// LoytyykoKirjain(jonot, 'a') === 2;
+    /// LoytyykoKirjain(jonot, 'A') === 2;
+    /// LoytyykoKirjain(jonot, 'b') === 0;
+    /// LoytyykoKirjain(jonot, '-') === 1;
+    /// string[] jonot2 = { "Jonne", "Jonne" };
+    /// LoytyykoKirjain(jonot, 'j') === 2;
+    /// string[] jonot3 = {  };
+    /// LoytyykoKirjain(jonot, 'C') === 0;
+    /// </pre>
+    /// </example>
+    public static int LoytyykoKirjain(string[] jonot, char etsittavaMerkki)
+    {
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/Luento10/Taulukot/Taulukot.csproj b/Luento10/Taulukot/Taulukot.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..085a6e3d4beb32574a83a24dd27da9164799f4a0
--- /dev/null
+++ b/Luento10/Taulukot/Taulukot.csproj
@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+    <PropertyGroup>
+        <OutputType>Exe</OutputType>
+        <TargetFramework>net8.0</TargetFramework>
+        <ExternalConsole>true</ExternalConsole>
+    </PropertyGroup>
+
+</Project>
diff --git a/Luento10/TaulukotTest/TaulukotTest.cs b/Luento10/TaulukotTest/TaulukotTest.cs
new file mode 100644
index 0000000000000000000000000000000000000000..57aabf9c6127759f64cfe03cf03306d43dfac7f5
--- /dev/null
+++ b/Luento10/TaulukotTest/TaulukotTest.cs
@@ -0,0 +1,46 @@
+// ReSharper disable all
+using System;
+using System.Text;
+using System.Linq;
+using System.Collections.Generic;
+using NUnit.Framework;
+using static Taulukot;
+using static Henkilo;
+
+	[TestFixture]
+	[DefaultFloatingPointTolerance(0.000001)]
+	public  class TestTaulukot
+	{
+		[Test]
+		public  void TestKuinkaMonessaEsiintyy90()
+		{
+			string[] nimet = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo", "Antti Aarnio" };
+			Assert.AreEqual( 3, KuinkaMonessaEsiintyy(nimet, 'a') , "in method KuinkaMonessaEsiintyy, line 92");
+			Assert.AreEqual( 0, KuinkaMonessaEsiintyy(nimet, 'b') , "in method KuinkaMonessaEsiintyy, line 93");
+			Assert.AreEqual( 3, KuinkaMonessaEsiintyy(nimet, 'A') , "in method KuinkaMonessaEsiintyy, line 94");
+			Assert.AreEqual( 0, KuinkaMonessaEsiintyy(new string[]{ }, 'a') , "in method KuinkaMonessaEsiintyy, line 95");
+		}
+		[Test]
+		public  void TestMontakoLukuaEnnenNollaa131()
+		{
+			int[] luvut = { 1, 2, 3, 5, 2, -1, 2, 0, 8, 9, 1, -1, 0, 8, 9 };
+			Assert.AreEqual( 7, MontakoLukuaEnnenNollaa(luvut) , "in method MontakoLukuaEnnenNollaa, line 133");
+			Assert.AreEqual( 0, MontakoLukuaEnnenNollaa(new int[] { }) , "in method MontakoLukuaEnnenNollaa, line 134");
+			Assert.AreEqual( 3, MontakoLukuaEnnenNollaa(new int[] { 3, 2, 1 }) , "in method MontakoLukuaEnnenNollaa, line 135");
+			Assert.AreEqual( 0, MontakoLukuaEnnenNollaa(new int[] { 0, 3, 2, 1 }) , "in method MontakoLukuaEnnenNollaa, line 136");
+		}
+		[Test]
+		public  void TestLoytyykoKirjain171()
+		{
+			string[] jonot = { "Antti-Jussi", "Jonne", "Vesa", "Tuomo" };
+			Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'a') , "in method LoytyykoKirjain, line 173");
+			Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'A') , "in method LoytyykoKirjain, line 174");
+			Assert.AreEqual( 0, LoytyykoKirjain(jonot, 'b') , "in method LoytyykoKirjain, line 175");
+			Assert.AreEqual( 1, LoytyykoKirjain(jonot, '-') , "in method LoytyykoKirjain, line 176");
+			string[] jonot2 = { "Jonne", "Jonne" };
+			Assert.AreEqual( 2, LoytyykoKirjain(jonot, 'j') , "in method LoytyykoKirjain, line 178");
+			string[] jonot3 = {  };
+			Assert.AreEqual( 0, LoytyykoKirjain(jonot, 'C') , "in method LoytyykoKirjain, line 180");
+		}
+	}
+
diff --git a/Luento10/TaulukotTest/TaulukotTest.csproj b/Luento10/TaulukotTest/TaulukotTest.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..9c331f55aa74c0b6837c6216ef9175f588632ab1
--- /dev/null
+++ b/Luento10/TaulukotTest/TaulukotTest.csproj
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Project Sdk="Microsoft.NET.Sdk">
+    <PropertyGroup>
+        <TargetFramework>net8.0</TargetFramework>
+        <IsPackable>false</IsPackable>
+    </PropertyGroup>
+    <ItemGroup>
+        <PackageReference Include="NUnit" Version="3.13.1"/>
+        <PackageReference Include="NUnit3TestAdapter" Version="3.17.0"/>
+        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.3"/>
+    </ItemGroup>
+    <ItemGroup>
+        <ProjectReference Include="..\Taulukot\Taulukot.csproj"/>
+    </ItemGroup>
+</Project>