Мы создали Id32
и Id64
struct для обертывания целых чисел и длинных значений, поступающих из БД, поэтому они могут быть явно обработаны как идентификаторы с помощью Json-конвертера (с выделенными настраиваемыми преобразователями).Runtime неявного литья из объекта
Проблема заключается в том, что мы читаем данные из Dictionary<string, object>
, что на самом деле является DataRow
-кака объекта, где string
часть является именем столбца и object
части значения.
Так до того мы имели этот код для чтения значения:
int myVal = (int)row["COLUMN"]
Мы хотим, чтобы этот код продолжать работать и после этих изменений.
Но так как row["COLUMN"]
- это object
(@ compile-time), то неявный листинг терпит неудачу, хотя на самом деле это Id32
(@ run-time).
Следующая, очевидно, работает:
int myVal = (Id32)row["COLUMN"]
Но есть некоторые пути, чтобы исправить это без изменения код, который считывает значение?
Это код структуры:
public struct Id32
{
public readonly int Value;
public Id32(int id) { this.Value = id; }
public static implicit operator int(Id32 id) { return id.Value; }
public static implicit operator Id32(int id) { return new Id32(id); }
}
См. Также: http://stackoverflow.com/questions/1611083/will-the-c-sharp-compiler-perform-multiple-implicit-conversions-to-get-from-one –
Этот вопрос касается неявных преобразований , не бросает. Хотя задействован кастинг (у вас есть «объект», и его нужно отличить от 'int', возможно, внутри неявного преобразования из' объекта', определенного в 'Id32'). – binki