#c#
Вопрос:
Я пытаюсь использовать Microsoft PersistentDictionary для создания постоянного словаря структуры.
PersistentDictionary can be installed from NuGet:
Microsoft.Database.Collections.Generic
v2.0.3
Согласно документации, следующее должно создать экземпляр PersistentDictionary.
[Serializable]
public struct MyStruct
{
public bool ABoolean;
public long ALong;
}
PersistentDictionary<int, MyStruct> pd =
new PersistentDictionary<int, MyStruct>("PersistentDict");
Вышесказанное приводит к довольно загадочному исключению:
System.ArgumentOutOfRangeException
Not supported for SetColumn (Parameter 'TColumn')
Actual value was PersistentDictionaryTrial.Program MyStruct.
В приведенном здесь примере кода структура, которую они определяют, имеет атрибуты в качестве примера структуры.
[Serializable](Serializable)
Добавление (сериализуемого) создает для меня ошибку компиляции. Есть примеры с () и без ().
Ошибка компиляции заключается в:
Error CS8124 Tuple must contain at least two elements.
Error IDE1007 The name 'Serializable' does not exist in the current
Следующее работает правильно, заставляя меня поверить, что в моей структуре есть что-то несоответствующее.
PersistentDictionary<int, DateTime> pd =
new PersistentDictionary<int, DateTime>("DateTimeDict");
Вот полный код для справки:
using System;
using Microsoft.Isam.Esent.Collections.Generic;
namespace PersistentDictionaryTrial
{
class Program
{
[Serializable]
public struct MyStruct
{
public bool ABoolean;
public long ALong;
}
static void Main(string[] args)
{
//Works correctly
PersistentDictionary<int, DateTime> pd1 =
new PersistentDictionary<int, DateTime>("DateTimeDict");
pd1.Flush();
pd1.Dispose();
//Fails - with exception thrown
PersistentDictionary<int, MyStruct> pd2 =
new PersistentDictionary<int, MyStruct>("PersistentDict");
pd2.Flush();
pd2.Dispose();
}
}
}
Комментарии:
1. Я отмечаю, что их образец использует общедоступные свойства, в то время как ваш использует общедоступные поля. Возможно, просто попробуйте свойства, следуя их примеру, и посмотрите, не изменит ли это что-нибудь?
2. Также попробуйте удалить каждое поле по очереди, посмотрите, какое из них вызывает проблемы?
3. Спасибо. Да, я пробовал обе эти идеи. Попробовал один
int
,long
,bool
. Пробовали со свойствами и без них, с общедоступными и без них, и пытались создать структуруinternal
.4. Я думаю, что это те условия, которым должен удовлетворять ваш тип. Не знаком с этой библиотекой или концепциями, поэтому не могу помочь вам в дальнейшем, но, возможно, некоторые проверки там могут вам что-то подсказать.
5. Он должен быть [Сериализуемым], а не [Сериализуемым](Сериализуемым). Мне это кажется правильным. Вы используете примитивные типы. Я попробую проверить завтра, когда у меня будет доступ к моему компьютеру для разработчиков.