Arşiv

Etiketlenen yazılar WriteLine

Uygulamanın Referans Listesini Almak

20 Kasım 2011 Yorum yapılmamış

Ç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);
}

Euler – 8

16 Kasım 2011 1 yorum

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…

Kısa Sınav – 17

10 Ekim 2011 3 yorum

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);

Bu kodda ne yanlış var? – 7

31 Ekim 2010 4 yorum

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?

Euler – 4

02 Eylül 2010 Yorum yapılmamış

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…

Bu kodda ne yanlış var? – 4

19 Temmuz 2010 5 yorum

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();
	}
}

Hem benzersiz hem de geçici dosya oluşturmanın en kolay yolu

07 Mart 2010 1 yorum

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.tmpstring 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.49estring değeri döndürdü.