У меня есть статический класс, в котором я использую словари в качестве таблиц поиска для сопоставления типов .NET и типов SQL. Вот пример такого словаря:
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"}
};
Затем у меня есть общедоступный метод ниже, который передает тип .NET и возвращает строковое значение соответствующего типа MS SQL Server, используя этот словарь. Однако, поскольку это используется в качестве таблицы поиска для выполнения запросов к базе данных, я думаю, имеет смысл сделать ее ConcurrentDictionary
. Я изменил его на:
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"}
};
Но теперь он подчеркивает все красным внутри {}
(т. е. все пары ключ-значение ConcurrentDictionary
), и возникает ошибка:
Не удается получить доступ к частному методу «Добавить» здесь
Я не думаю, что это потому, что я инициализировал его как private static readonly
, потому что я только что проверил, создав версию public static
, и получил ту же ошибку.