C# Netcord'da object reference not set to an instance of an object hatası

arda.nb01

Centipat
Katılım
24 Ocak 2024
Mesajlar
281
Daha fazla  
Cinsiyet
Erkek
Merhaba, bir Discord botu geliştiriyorum amacım bir listede veya bir dosya türünden veri çekip yazdırması ama object reference not set to an instance of an object. Hatası alıyorum. Kodum:

C#:
public class CreatorsCommand : CommandModule<CommandContext>
{
 private static readonly List<string> Creators = new List<string>
 {
 "Erder", "Arda", "Grk"
 };

 [Command("creators")]
 public async Task ShowCreatorsAsync()
 {
 try.
 {
 if (Creators == null || !Creators.Any())
 {
 await Context.Channel.SendMessageAsync("Herhangi bir creator bulunamadı.");
 return;
 }

 // Creator listesi.
 string creatorText = "**🎨 Creators 🎨**\n\n";
 creatorText += "**#** **İsim**\n";
 creatorText += "---------------------\n";

 for (int i = 0; i < Creators.Count; i++)
 {
 creatorText += $"**#{i + 1}** {Creators[i]}\n";
 }

 // Mesaj.
 await Context.Channel.SendMessageAsync(creatorText);
 }
 catch (System.Exception ex)
 {
 // Hata durumunda.
 await Context.Channel.SendMessageAsync($"Bir hata oluştu: {ex.Message}");
 }
 }
}
 
"!Creators.Any()" kısmında referans boş hatası veremez kodun bu olduğundan emin misin?

Hocam kodu GPT ile biraz daha geliştirdim soh hali bu ama hata devam ediyor. Acaba özel bir using mi kullanmamız gerekli? İşte kod:

C#:
public class CreatorCommand : CommandModule<CommandContext>
{
 [Command("creators")]
 public async Task HandleCreatorsAsync(string subCommand, string creatorName = null, long? id = null)
 {
 try.
 {
 switch (subCommand.ToLower())
 {
 case "list":
 var creators = Creators.GetAllCreators();

 if (creators == null || creators.Count == 0)
 {
 await Context.Channel.SendMessageAsync("❌ Yaratıcı listesi boş!");
 return;
 }

 string creatorText = "**🎨 Yaratıcılar 🎨**\n\n";
 creatorText += "**#** **İsim** **ID** **Kullanım Sayısı**\n";
 creatorText += "---------------------------------------\n";

 for (int i = 0; i < creators.Count; i++)
 {
 var creator = creators[i];
 if (creator == null) continue; // Null kontrolü.
 creatorText += $"**#{i + 1}** {creator.Name} {creator.Id} {creator.UsageCount}\n";
 }

 await Context.Channel.SendMessageAsync(creatorText);
 break;

 case "add":
 if (string.IsNullOrEmpty(creatorName) || id == null)
 {
 await Context.Channel.SendMessageAsync("❌ Lütfen bir yaratıcı adı ve ID belirtin! Örnek: `!creators add Arda 12345`");
 return;
 }

 if (Creators.CreatorExists(creatorName))
 {
 await Context.Channel.SendMessageAsync($"❌ `{creatorName}` adlı yaratıcı zaten mevcut!");
 return;
 }

 Creators.AddCreatorByName(creatorName, id.Value);
 await Context.Channel.SendMessageAsync($"✅ `{creatorName}` adlı yaratıcı başarıyla eklendi!");
 break;

 case "delete":
 if (string.IsNullOrEmpty(creatorName))
 {
 await Context.Channel.SendMessageAsync("❌ Silinecek yaratıcı adını belirtin! Örnek: `!creators delete Arda`");
 return;
 }

 if (!Creators.CreatorExists(creatorName))
 {
 await Context.Channel.SendMessageAsync($"❌ `{creatorName}` adlı yaratıcı bulunamadı!");
 return;
 }

 Creators.DeleteCreatorByName(creatorName);
 await Context.Channel.SendMessageAsync($"✅ `{creatorName}` adlı yaratıcı başarıyla silindi!");
 break;

 default:
 await Context.Channel.SendMessageAsync("❌ Geçersiz komut! Kullanılabilir komutlar: `list`, `add`, `delete`.");
 break;
 }
 }
 catch (NullReferenceException ex)
 {
 await Context.Channel.SendMessageAsync($"❌ Bir hata oluştu: Nesne referansı hatası. Detay: {ex.Message}");
 }
 catch (System.Exception ex)
 {
 await Context.Channel.SendMessageAsync($"❌ Genel bir hata oluştu: {ex.Message}");
 }
 }
}
 
Hocam kodu GPT ile biraz daha geliştirdim soh hali bu ama hata devam ediyor. Acaba özel bir using mi kullanmamız gerekli? İşte kod:

C#:
public class CreatorCommand : CommandModule<CommandContext>
{
 [Command("creators")]
 public async Task HandleCreatorsAsync(string subCommand, string creatorName = null, long? id = null)
 {
 try.
 {
 switch (subCommand.ToLower())
 {
 case "list":
 var creators = Creators.GetAllCreators();

 if (creators == null || creators.Count == 0)
 {
 await Context.Channel.SendMessageAsync("❌ Yaratıcı listesi boş!");
 return;
 }

 string creatorText = "**🎨 Yaratıcılar 🎨**\n\n";
 creatorText += "**#** **İsim** **ID** **Kullanım Sayısı**\n";
 creatorText += "---------------------------------------\n";

 for (int i = 0; i < creators.Count; i++)
 {
 var creator = creators[i];
 if (creator == null) continue; // Null kontrolü.
 creatorText += $"**#{i + 1}** {creator.Name} {creator.Id} {creator.UsageCount}\n";
 }

 await Context.Channel.SendMessageAsync(creatorText);
 break;

 case "add":
 if (string.IsNullOrEmpty(creatorName) || id == null)
 {
 await Context.Channel.SendMessageAsync("❌ Lütfen bir yaratıcı adı ve ID belirtin! Örnek: `!creators add Arda 12345`");
 return;
 }

 if (Creators.CreatorExists(creatorName))
 {
 await Context.Channel.SendMessageAsync($"❌ `{creatorName}` adlı yaratıcı zaten mevcut!");
 return;
 }

 Creators.AddCreatorByName(creatorName, id.Value);
 await Context.Channel.SendMessageAsync($"✅ `{creatorName}` adlı yaratıcı başarıyla eklendi!");
 break;

 case "delete":
 if (string.IsNullOrEmpty(creatorName))
 {
 await Context.Channel.SendMessageAsync("❌ Silinecek yaratıcı adını belirtin! Örnek: `!creators delete Arda`");
 return;
 }

 if (!Creators.CreatorExists(creatorName))
 {
 await Context.Channel.SendMessageAsync($"❌ `{creatorName}` adlı yaratıcı bulunamadı!");
 return;
 }

 Creators.DeleteCreatorByName(creatorName);
 await Context.Channel.SendMessageAsync($"✅ `{creatorName}` adlı yaratıcı başarıyla silindi!");
 break;

 default:
 await Context.Channel.SendMessageAsync("❌ Geçersiz komut! Kullanılabilir komutlar: `list`, `add`, `delete`.");
 break;
 }
 }
 catch (NullReferenceException ex)
 {
 await Context.Channel.SendMessageAsync($"❌ Bir hata oluştu: Nesne referansı hatası. Detay: {ex.Message}");
 }
 catch (System.Exception ex)
 {
 await Context.Channel.SendMessageAsync($"❌ Genel bir hata oluştu: {ex.Message}");
 }
 }
}
Verdiğin kodda Creators değişkeninin sınıfı yok hatanın nereden geleceği belli değil.

Yine bu kodda aynı yazım hatası var "try." kodun derlenebildiğinden emin misin? "try." değil "try" olması lazım.
 
Verdiğin kodda creators değişkeninin sınıfı yok hatanın nereden geleceği belli değil.

Yine bu kodda aynı yazım hatası var "try." kodun derlenebildiğinden emin misin? "try." değil "try" olması lazım.

Hocam yazım denetimi nokta koyuyormuş kodda. Nokta yok. İşre creators. CS:

C#:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;

namespace Supercell.Laser.Server
{
 public static class Creators.
 {
 private static readonly object _lock = new object();
 private static string FilePath { get; }
 private static List<Creator> CreatorList { get; set; }

 static Creators()
 {
 FilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "creators.json");
 LoadCreators();
 }

 private static void LoadCreators()
 {
 try.
 {
 if (File.Exists(FilePath))
 {
 var json = File.ReadAllText(FilePath);
 CreatorList = JsonConvert.DeserializeObject<List<Creator>>(json) ?? new List<Creator>();
 }
 else.
 {
 CreatorList = new List<Creator>();
 }
 }
 catch (Exception ex)
 {
 Console.WriteLine($"Error loading creators: {ex.Message}");
 CreatorList = new List<Creator>(); // Fallback to an empty list.
 }
 }

 private static void SaveCreators()
 {
 try.
 {
 var json = JsonConvert.SerializeObject(CreatorList, Formatting.Indented);
 File.WriteAllText(FilePath, json);
 }
 catch (Exception ex)
 {
 Console.WriteLine($"Error saving creators: {ex.Message}");
 }
 }

 public static void AddCreatorByName(string creatorName, long id)
 {
 lock (_lock)
 {
 if (!CreatorExists(creatorName))
 {
 CreatorList.Add(new Creator { Name = creatorName, Id = id, UsageCount = 0 });
 SaveCreators();
 }
 }
 }

 public static void DeleteCreatorByName(string creatorName)
 {
 lock (_lock)
 {
 CreatorList.RemoveAll(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 SaveCreators();
 }
 }

 public static void IncreaseCreator(string creatorName)
 {
 lock (_lock)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 if (creator != null)
 {
 creator.UsageCount++;
 SaveCreators();
 }
 }
 }

 public static void ReduceCreator(string creatorName)
 {
 lock (_lock)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 if (creator != null && creator.UsageCount > 0)
 {
 creator.UsageCount--;
 SaveCreators();
 }
 }
 }

 public static List<Creator> GetAllCreators()
 {
 return CreatorList;
 }

 public static bool CreatorExists(string creatorName)
 {
 if (string.IsNullOrEmpty(creatorName)) return false;
 return CreatorList.Exists(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 }

 public static string CreatorInfoByName(string creatorName)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 return creator != null ? $"Name: {creator.Name}, ID: {creator.Id}, Usage Count: {creator.UsageCount}" : "Creator not found.";
 }

 public static long GetCreatorIdByName(string creatorName)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 return creator?.Id ?? -1; // Return -1 if creator is not found.
 }

 public class Creator.
 {
 public string Name { get; set; }
 public long Id { get; set; }
 public int UsageCount { get; set; }
 }
 }
}
 
Hocam yazım denetimi nokta koyuyormuş kodda. Nokta yok. İşre creators. CS:

C#:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;

namespace Supercell.Laser.Server
{
 public static class Creators.
 {
 private static readonly object _lock = new object();
 private static string FilePath { get; }
 private static List<Creator> CreatorList { get; set; }

 static Creators()
 {
 FilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "creators.json");
 LoadCreators();
 }

 private static void LoadCreators()
 {
 try.
 {
 if (File.Exists(FilePath))
 {
 var json = File.ReadAllText(FilePath);
 CreatorList = JsonConvert.DeserializeObject<List<Creator>>(json) ?? new List<Creator>();
 }
 else.
 {
 CreatorList = new List<Creator>();
 }
 }
 catch (Exception ex)
 {
 Console.WriteLine($"Error loading creators: {ex.Message}");
 CreatorList = new List<Creator>(); // Fallback to an empty list.
 }
 }

 private static void SaveCreators()
 {
 try.
 {
 var json = JsonConvert.SerializeObject(CreatorList, Formatting.Indented);
 File.WriteAllText(FilePath, json);
 }
 catch (Exception ex)
 {
 Console.WriteLine($"Error saving creators: {ex.Message}");
 }
 }

 public static void AddCreatorByName(string creatorName, long id)
 {
 lock (_lock)
 {
 if (!CreatorExists(creatorName))
 {
 CreatorList.Add(new Creator { Name = creatorName, Id = id, UsageCount = 0 });
 SaveCreators();
 }
 }
 }

 public static void DeleteCreatorByName(string creatorName)
 {
 lock (_lock)
 {
 CreatorList.RemoveAll(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 SaveCreators();
 }
 }

 public static void IncreaseCreator(string creatorName)
 {
 lock (_lock)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 if (creator != null)
 {
 creator.UsageCount++;
 SaveCreators();
 }
 }
 }

 public static void ReduceCreator(string creatorName)
 {
 lock (_lock)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 if (creator != null && creator.UsageCount > 0)
 {
 creator.UsageCount--;
 SaveCreators();
 }
 }
 }

 public static List<Creator> GetAllCreators()
 {
 return CreatorList;
 }

 public static bool CreatorExists(string creatorName)
 {
 if (string.IsNullOrEmpty(creatorName)) return false;
 return CreatorList.Exists(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 }

 public static string CreatorInfoByName(string creatorName)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 return creator != null ? $"Name: {creator.Name}, ID: {creator.Id}, Usage Count: {creator.UsageCount}" : "Creator not found.";
 }

 public static long GetCreatorIdByName(string creatorName)
 {
 var creator = CreatorList.Find(c => c.Name.Equals(creatorName, StringComparison.OrdinalIgnoreCase));
 return creator?.Id ?? -1; // Return -1 if creator is not found.
 }

 public class Creator.
 {
 public string Name { get; set; }
 public long Id { get; set; }
 public int UsageCount { get; set; }
 }
 }
}
Burada dış etkenler var ama cctor'dan dolayı başlangıçta her türlü List'in bir objeye işaret etmesi lazım. Kodun bu halinde hangi hata ve nerede çıkıyor?
 
Burada dış etkenler var ama Cctor'dan dolayı başlangıçta her türlü List'in bir objeye işaret etmesi lazım. Kodun bu halinde hangi hata ve nerede çıkıyor?

Hatanın çıktığı yer:
Ekran görüntüsü 2025-01-05 164453.png
 

Technopat Haberler

Yeni konular

Geri
Yukarı