.NET türleri ve SQL türleri arasında eşlemek için arama tabloları olarak sözlükler kullandığım statik bir sınıfım var. İşte böyle bir sözlüğe bir örnektir: ConcurrentDictionary nasıl başlatılır? Hata: "Özel yönteme erişilemiyor" Buraya ekle "
private static readonly Dictionary<Type, string> SqlServerMap = new Dictionary<Type, string>
{
{typeof (Boolean), "bit"},
{typeof (Byte[]), "varbinary(max)"},
{typeof (Double), "float"},
{typeof (Byte), "tinyint"},
{typeof (Int16), "smallint"},
{typeof (Int32), "int"},
{typeof (Int64), "bigint"},
{typeof (Decimal), "decimal"},
{typeof (Single), "real"},
{typeof (DateTime), "datetime2(7)"},
{typeof (TimeSpan), "time"},
{typeof (String), "nvarchar(MAX)"},
{typeof (Guid), "uniqueidentifier"}
};
Sonra bir .NET türü geçtiği aşağıda genel bir yöntem var ve bu sözlüğü kullanarak karşılık gelen MS SQL Server türü dize değeri döndürür. Ancak, bu veritabanı sorguları yapmak için bir arama tablosu olarak kullanıldığından, bir ConcurrentDictionary yapmak için mantıklı olduğunu düşünüyorum. Ben bunu değiştirdi.
private static readonly IDictionary<Type, string> SqlServerMap = new ConcurrentDictionary<Type, string>
{
{typeof (Boolean), "bit"},
{typeof (Byte[]), "varbinary(max)"},
{typeof (Double), "float"},
{typeof (Byte), "tinyint"},
{typeof (Int16), "smallint"},
{typeof (Int32), "int"},
{typeof (Int64), "bigint"},
{typeof (Decimal), "decimal"},
{typeof (Single), "real"},
{typeof (DateTime), "datetime2(7)"},
{typeof (TimeSpan), "time"},
{typeof (String), "nvarchar(MAX)"},
{typeof (Guid), "uniqueidentifier"}
};
Ama şimdi {} (ConcurrentDictionary yani tüm anahtar değer çiftleri) içinde kırmızı herşeyi altını çizer ve hata burada 'Ekle' özel yöntemine erişilemiyor" dir Bilmiyorum ben sadece kamu statik versiyonunu yaparak test çünkü özel statik salt okunur olarak başlatılamıyor çünkü olduğunu düşünüyorum ve ben aynı hatayı alıyorum.
Ah tamam, teşekkürler. Keşke daha önce statik bir ConcurrentDictionary içinde başlatılmış olsaydım, çünkü değişmeyeceğini biliyorum ve sadece hızlı bir şekilde erişmek istiyorum. Ama ne yapabilirim göreceğim. – Drew
@Drew Ve koleksiyon koleksiyonlayıcısı kullanmak yerine 'IEnumerable'ını yapıcıya geçirebilirsiniz. – Servy
Ohh Cevabınızda ne kastettiğinizi yanlış anladım, teşekkürler! – Drew