Autor Wątek: Tworzenie instancji w ifach  (Przeczytany 1356 razy)

Offline mawpa

  • Użytkownik

# Styczeń 31, 2011, 14:12:45
Mam takie coś:
public static string HashEncode(string type, string text)
{
  HashAlgorithm hash;
  if (type == "MD5") hash = MD5.Create();
  if (type == "SHA1") hash = SHA1.Create();
  if (type == "SHA256") hash = SHA256.Create();
  if (type == "SHA384") hash = SHA384.Create();
  if (type == "SHA512") hash = SHA512.Create();
  byte[] data = hash.ComputeHash(Encoding.ASCII.GetBytes(text)); // error
  return ByteArrToString(data);
}
I kompilator pluje się, że do hasha nic nie jest przypisane. Wiem, że słusznie, ale jak to ominąć, żeby nie dokładać za dużo kodu? New po każdym ifie nie działa, bo klasy MD5 itd. też są abstrakcyjne.

@Down: LOL. Ale ze mnie debil ;D
« Ostatnia zmiana: Styczeń 31, 2011, 14:21:47 wysłana przez mawpa »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline krajek

  • Użytkownik

# Styczeń 31, 2011, 14:19:01
HashAlgorithm hash = null;?

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Styczeń 31, 2011, 18:18:48
public static string HashEncode(string type, string text)
{
  HashAlgorithm hash;
  if (type == "MD5") hash = MD5.Create();
  else if (type == "SHA1") hash = SHA1.Create();
  else if (type == "SHA256") hash = SHA256.Create();
  else if (type == "SHA384") hash = SHA384.Create();
  else if (type == "SHA512") hash = SHA512.Create();
  else hash = null;
  byte[] data = hash.ComputeHash(Encoding.ASCII.GetBytes(text)); // error
  return ByteArrToString(data);
}
Powinno działać.

Offline mawpa

  • Użytkownik

# Styczeń 31, 2011, 22:12:32
Działa to, co dał krajek. W ogóle można ten temat uznać za jeden z "najgłupszych błędów" :P

Offline Dab

  • Redaktor
    • blog

# Styczeń 31, 2011, 22:21:39
Cytuj
public static string HashEncode(string type, string text)
{
  HashAlgorithm hash;
  if (type == "MD5") hash = MD5.Create();
  if (type == "SHA1") hash = SHA1.Create();
  if (type == "SHA256") hash = SHA256.Create();
  if (type == "SHA384") hash = SHA384.Create();
  if (type == "SHA512") hash = SHA512.Create();
  byte[] data = hash.ComputeHash(Encoding.ASCII.GetBytes(text)); // error
  return ByteArrToString(data);
}

Skoro to i tak C# to lepiej byłoby już po przejściu przez poszczególne ify zrobić else throw new NieMaTakiegoHashaSpadajNaDrzewoException(); (ew. typ hasha podawać jako enum).