PersistentDictionary не удалось создать для пользовательской структуры

#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. Он должен быть [Сериализуемым], а не [Сериализуемым](Сериализуемым). Мне это кажется правильным. Вы используете примитивные типы. Я попробую проверить завтра, когда у меня будет доступ к моему компьютеру для разработчиков.