Во-первых, обратите внимание, что публичные поля обычно очень плохая идея; но если мы предположим, что это было частное вспомогательное поле, здесь есть 2 интересных варианта;
Во-первых, использовать вывод общего типа; это не работает для типа return , но работает для параметров, поэтому вы можете получить:
row.GetField("MyDecimalColumnName", out obj.someField);
где это:
GetField<T>(string name, out T value);
Другим приемом было бы использование неявных операторов, то есть GetField(string)
возвращает фиктивный объект, имеющий неявные операторы преобразования, для нескольких типов, таких как int
, decimal
и т. Д., И выполняет работу / преобразование в оператор. Немного хакерский, но сработает - синтаксис будет:
myClass.myDecimal = row.Field("SomeColumn")
с:
SomeDummyType GetField(string name);
и SomeDummyType
с оператором неявного статического преобразования или несколькими.
Тем не менее! IMO лучший вариант здесь - использовать инструмент, такой как ORM или микро-ORM, чтобы загрузить значения для вас, и вообще не использовать DataRow
.
Еще один простой вариант - перейти на старую школу:
myClass.myDecimal = (decimal)row["SomeColumn"];
Я имею в виду - действительно ли .Field<T>
вам так сильно помогает? Вы действительно реорганизуете свои занятия достаточно часто, чтобы об этом стоило беспокоиться?