Çalışma zamanında (Run-Time) uygulamanın referans olarak kullandığı assembly‘lerin (dll) listesini almak için aşağıdaki LINQ sorgusunu kullanabilirsiniz;
var assemblies = from assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()
let assembly = Assembly.Load(assemblyName)
let companies = assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), false)
where companies.Length > 0 && (companies[0] as AssemblyCompanyAttribute).Company != "Microsoft Corporation"
select assembly;
Assembly sınıfının static GetExecutingAssembly() method’unu kullanarak çalışan assembly‘ye ulaşabiliriz.
GetReferencedAssemblies() method’u ilgili Assembly‘nin referans olarak kullandığı assembly‘lerin listesini döndürür.
Assembly sınıfının static Load() method’u ile ilgili assembly hafızaya yüklenir.
GetCustomAttributes() method’u ile ilgili assembly‘nin çeşitli meta bilgileri sorgulanabilir. Örneğin;
AssemblyCompanyAttribute bilgisini aldıktan sonra, Microsoft Corporation değerinden farklı olduğunu kontrol ederek, Microsoft firması haricinde firmaların referans assembly‘lerini bulabiliriz.
Son olarak, basit bir foreach döngüsü ile assembly listesini ekrana yazdırabiliriz;
foreach (var assembly in assemblies)
{
Console.WriteLine(assembly.FullName);
}
C#, Programlama
assembly, assemblycompanyattribute, assemblycopyrightattribute, assemblydescriptionattribute, assemblyfileversionattribute, assemblyproductattribute, assemblytitleattribute, console, foreach, fullname, getcustomattributes, getexecutingassembly, getreferencedassemblies, linq, linq query, load, loop, reflection, runtime, static, WriteLine
Euler serisinin sekizinci yazısında, Project Euler’in 8. sorusunu çözeceğiz;
Orjinal Soru; Find the greatest product of five consecutive digits in the 1000-digit number.
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
Türkçesi; 1000 haneli rakamdan yan yana gelen en büyük 5 haneli rakamı bulunuz.
7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…
Aşağıdaki kod bloğunu çalıştırdığımızda ekranda hangi sonuçlar yazar?
Console.WriteLine(26 % 4 * 3);
Console.WriteLine(4 / 3 + 2);
var fiyat = 4;
var indirim = 5;
Console.WriteLine(fiyat - indirim++);
byte rakam = 255;
Console.WriteLine(++rakam);
Aşağıdaki kod sayesinde ekrana, listedeki isimleri küçük harflerle yazdırmak istiyorsunuz.
using System;
using System.Collections.Generic;
public class EkranaYazdir
{
public static void Main()
{
List<string> Kisiler = new List<string>();
Kisiler.Add("AHMET");
Kisiler.Add("MEHMET");
Kisiler.Add("AYŞE");
Kisiler.Add("FATMA");
/// string elemanları küçük harfe çevir
Kisiler.ForEach(
delegate(string k)
{
k = k.ToLower();
}
);
/// console'a yaz
Kisiler.ForEach(
delegate(string s)
{
Console.WriteLine(s);
}
);
}
}
MSDN‘de List<T>.ForEach() sayfasında;
Orjinali; Performs the specified action on each element of the List.
Türkçesi; Listedeki her eleman için belirlenmiş action çalıştırır.
yazısını okudunuz, ve kodun doğru çalışmasını bekliyorsunuz.
Fakat istediğiniz gibi çalışmıyor, sizce problem nedir ve nasıl düzeltilebilir?
C#, Programlama
action, add, bknyv, class, console, delegate, foreach, generic, list, msdn, static, string, tolower, using, WriteLine
Euler serisinin dördüncü yazısında, Project Euler’in 4. sorusunu çözeceğiz;
Orijinal soru; A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Türkçesi; Palindromik sayı, düz ve tersten aynı şekilde okunan sayıdır. 2 haneli rakamlar ile oluşturulabilecek en büyük palindromik sayı 9009′dur (91 ve 99 kullanılarak) 3 haneli rakamlar ile oluşturulabilecek en büyük palindromik sayıyı bulunuz.
Önce siz çözmeyi deneyin, çözemezseniz Devamını oku…
C#, Programlama
console, Enumerable, euler, from, let, max, palindrom, range, reverse, select, string, toarray, where, WriteLine
Bowling skorlarını hesaplayan bir uygulama yazıyoruz.
2 oyuncunun 3 oyunda aldığı skorları hesaplayan aşağıdaki kodu yazdık ve çalıştırdık.
Fakat rakamlarda bir terslik var sanki. Sizce problem nedir ve nasıl düzeltebiliriz?
using System;
class Program
{
static void Main(string[] args)
{
int[,] PuanTablosu = { {101, 128, 143}, {123, 115, 116} };
int OyuncuPuan = 0;
for (int iLoop = 0; iLoop < = PuanTablosu.GetUpperBound(0); iLoop++)
{
for (int yLoop = 0; yLoop <= PuanTablosu.GetUpperBound(1); yLoop++)
{
OyuncuPuan += PuanTablosu[iLoop, yLoop];
}
Console.WriteLine("Oyuncu {0} skor: {1}", iLoop + 1, OyuncuPuan);
}
Console.ReadLine();
}
}
Geliştirdiğiniz bir uygulamada, geçici bir dosyaya ihtiyacınız olduğunu düşünelim. Ama daha önce oluşturulmuş bir dosyanın ismini vermediğinizden emin olmak istiyorsunuz.
- Kullanıcının geçici dosyaları hangi dizinde tuttuğunu bulmak
- Rastgele bir dosya ismi üretmek, eğer bu dosya isminde bir dosya varsa, yeni bir dosya ismi bulana kadar rastgele yeni dosya ismi üretmek
- Ürettiğiniz rastgele isme sahip yeni bir dosya oluşturmak
adımlarını gerçekleştirmek yerine, Path.GetTempFileName() method’unu kullanabilirsiniz.
string GeciciDosya = Path.GetTempFileName(); /// GeciciDosya değişkeni kullanıcının Temp dizininde 0-byte boyutlu bir dosyanın tam dosya yolunu içerir.
using (StreamWriter sw = File.OpenText(GeciciDosya))
{
sw.WriteLine("Geçici Dosyaya yazılacak bilginin ilk satırı");
}
Benim kullandığım bilgisayarda, Path.GetTempFileName() methodu geriye “C:\Documents and Settings\EnginPolat\Local Settings\Temp\tmp3A.tmp” string değeri döndürdü.
Eğer rastgele dosyanın gerçekten oluşturulmasını değil, sadece dosya isminin üretilmesini istiyorsanız; Path.GetRandomFileName() methodunu kullanabilirsiniz;
string DosyaAdi = Path.GetRandomFileName(); /// DosyaAdi değişkeni sadece rastgele bir dosya ismini içerir.
Benim bilgisayarımda, Path.GetRandomFileName() methodu geriye “z4a2sa4a.49e” string değeri döndürdü.
C#, Programlama
create, file, File.OpenText, generate, Path.GetRandomFileName(), Path.GetTempFileName(), random, rastgele, StreamWriter, string, WriteLine