C# Универсальный метод с универсальным возвращаемым типом

503
08 февраля 2017, 22:10

Приветствую вас, пытаюсь понять как работают Generic методы, типы и прочее
имеется вот такой код

public static ReadType MyMethod<ReadType>(int MyValue1, int MyValue2) 
{
    byte[] bytes = new[8]{ MyValue1, MyValue2};
    return (ReadType)Convert.ChangeType(bytes, typeof(ReadType));
}

Использовать я его пытаюсь так

label1.Text = MyMethod<int>(100, 100).ToString();

Но вылетает исключение

Объект должен реализовывать интерфейс IConvertible.  

Я знаю что можно использовать возращаемый тип

dynamic

Но мне хочется всё же понять, как решить эту проблему, пытался делать вот так

ReadType MyMethod<ReadType>(int MyValue1, int MyValue2) where ReadType : IConvertible 

Никаких плодов это не принесло, я MSDN перешерстил, подобные вопросы искал, но не могу решить свою проблему, как же всё таки реализовать этот интерфейс и решить эту проблему?

Очень надеюсь на подробное описание и решение данной проблемы.

Answer 1

Смотрим, что говорится на MSDN о Convert.ChangeType:

public static object ChangeType
(  
    object value,  
    Type conversionType  
)

value
Type: System.Object

Объект, реализующий интерфейс IConvertible.

Смотрим на описание класса Array:

public abstract class Array : ICloneable, IList, ICollection, 
    IEnumerable, IStructuralComparable, IStructuralEquatable

Реализует массив интерфейс IConvertible? Нет, не реализует. Следовательно, его нельзя использовать в качестве первого параметра.
То есть ошибка выдается не о том типе, в который Вы пытаетесь конвертировать данные, а об исходном byte[].

Да и как вообще Вы представляете преобразование 8 байт (64 бита) в Int32 (32 бита)? В каком порядке эти байты должны обрабатываться? Что с ними должно происходить при преобразовании? Всё это знаете Вы - но никак не разработчики языка. Это не очевидное преобразование.

Используйте какую-то другую логику преобразования вместо Convert.ChangeType.

READ ALSO
Как задизейблить кнопки в форме VS2015

Как задизейблить кнопки в форме VS2015

Имеется форма на WinFormsНа форме есть кнопочки

383
Что такое advertise-запрос?

Что такое advertise-запрос?

Встретил в задании формулировку: Advertise-запросГугл не даёт никакой информации

917
Как задать стиль через OpenXML?

Как задать стиль через OpenXML?

У меня есть шаблон docx с метками, которые я заменяю html-кодом

468
создать объект с вложенными классами

создать объект с вложенными классами

Мне надо в одном списке хранить как общие параметры, так и пользовательские параметрыДля этого я использую вложенные классы

316