17. juli 2008 - 09:14Der er
8 kommentarer og 1 løsning
Hente informationer ind i en metode
Hej,
Jeg er lidt på herrens mark, så håber I kan hjælpe mig :-)
Et bil eksempel:
Sum 1 x Bil X antal fabriksmonteret udstyr X antal eftermonteret udstyr
Det vil sige en bil, kan bestå af summer fra Bil, fabriks- og eftermonteret udstyr, et eller andet antal fabriksmonteret udstyr (eller ingen) og et eller andet antal eftermonteret udstyr (eller ingen).
Når jeg normalt har en metode, der bliver kaldt, henter jeg parametre ind med eksempelvis: MinMetode(int carId, string carName) {}
Og så laver jeg min beregning i metoden.
Nu har jeg brug for at få ovennævnte ind - altså en række med forskellige summer, en række der dækker bil delen, X antal rækker (af og til 0 rækker) fabriksmonteret udstyr og X antal rækker (af og til 0 rækker) eftermonteret udstyr.....
Hvordan skal jeg få det ind i min metode, så jeg kan arbejde med det?
Og ikke mindst, hvordan hitter jeg ud af i selve min metode, hvilken del der er hvilken del?
For at finde ud af hvad som er hvad i metoden, kan du gøre noget ala:
public void MinMetode(Enhed[] enheder) { foreach (Enhed enhed in enheder) { switch (enhed.Type) { case "Bil": //Skriv noget kode for biler. break; case "Fabriksmonteret udstyr": //Skriv noget kode for fabriksmonteret udstyr. break; case "Eftermonteret udstyr": //Skriv noget kode for eftermonteret udstyr. break; default: //Udstyret er af en ukendt type, så der kastes en fejl. throw new Exception("Ukendt enhedstype"); } } }
namespace E { public class Unit { public string Name { get; set; } public string UnitType { get; set; } public double Tax { get; set; } public Unit(string name, string unittype, double tax) { this.Name = name; this.UnitType = unittype; this.Tax = tax; } } public class Program { public static double TotalTax(Unit[] ua) { double sum = 0; foreach(Unit u in ua) { sum += u.Tax; } return sum; } public static int NumberOfFactoryInstalled(Unit[] ua) { int sum = 0; foreach(Unit u in ua) { switch(u.UnitType) { case "Bil": case "Eftersmonteret udstyr": // nothing break; case "Fabriksmonteret udstyr": sum++; break; default: throw new ArgumentException("Not a valid unit type"); } } return sum; } public static void Main(string[] args) { Unit[] ua = new Unit[4]; ua[0] = new Unit("Folkevogn", "Bil", 240.00); ua[1] = new Unit("Udstyr #1", "Fabriksmonteret udstyr", 10.00); ua[2] = new Unit("Udstyr #2", "Fabriksmonteret udstyr", 50.00); ua[3] = new Unit("Udstyr #3", "Eftersmonteret udstyr", 200.00); Console.WriteLine(TotalTax(ua)); Console.WriteLine(NumberOfFactoryInstalled(ua)); Console.ReadKey(); } } }
// 1. use an enum instead of a string for unit type // 2. use collection instead of array // 3. use decimal instead of double for tax amount // 4. specify the wrong unit type in exception
using System; using System.Collections.Generic;
namespace E { public enum TypesOfUnit { Car, FactoryInstalled, AfterMarketInstalled } public class Unit { public string Name { get; set; } public TypesOfUnit UnitType { get; set; } public decimal Tax { get; set; } public Unit(string name, TypesOfUnit unittype, decimal tax) { this.Name = name; this.UnitType = unittype; this.Tax = tax; } } public class Program { public static decimal TotalTax(List<Unit> ulst) { decimal sum = 0; foreach(Unit u in ulst) { sum += u.Tax; } return sum; } public static int NumberOfFactoryInstalled(List<Unit> ulst) { int sum = 0; foreach(Unit u in ulst) { switch(u.UnitType) { case TypesOfUnit.Car: case TypesOfUnit.AfterMarketInstalled: // nothing break; case TypesOfUnit.FactoryInstalled: sum++; break; default: throw new ArgumentException("Not a valid unit type: " + (int)u.UnitType); } } return sum; } public static void Main(string[] args) { List<Unit> ulst = new List<Unit>(); ulst.Add(new Unit("Folkevogn", TypesOfUnit.Car, 240.00m)); ulst.Add(new Unit("Udstyr #1", TypesOfUnit.FactoryInstalled, 10.00m)); ulst.Add(new Unit("Udstyr #2", TypesOfUnit.FactoryInstalled, 50.00m)); ulst.Add(new Unit("Udstyr #3", TypesOfUnit.AfterMarketInstalled, 200.00m)); Console.WriteLine(TotalTax(ulst)); Console.WriteLine(NumberOfFactoryInstalled(ulst)); Console.ReadKey(); } } }
Eksemplerne er console app ikke web app, men det har ikke nogen betydning for pointen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.