2015-11-19 2 views
1

Я пытаюсь написать матричный класс в C# и хочу охватывать только целые типы. Да, я знаю, есть, вероятно, множество других библиотек, которые уже предоставляют эту функциональность - я просто хотел попробовать попробовать применить математику, которую я изучаю в школе.Ограничение типа для класса C#

Во всяком случае, реальная проблема: у меня есть конструктор:

public class Matrix { 
    private int[,] __matrix; 

    Matrix(int rows, int columns) { 
     /* ... some logic here ... */ 
     __matrix = new int[row , columns]; 
    } 
} 

Я знаю, что вы можете ограничить до всего структур, но это также означает, что такие вещи, как DateTime может оказаться в матрице. Любые предложения о том, как решить эту проблему, или кто-нибудь видел это в другом месте? Я подумывал написать общий класс, но я почти склоняюсь к атрибуту, объявляющему допустимые типы, а затем просто проверяя этот атрибут в коде на этом этапе, но я также совсем не упомянул о перспективах бокса/распаковки накладные расходы на использование object[] для моей матрицы.

+1

Вы можете создать общий класс. Затем сделайте простую проверку типа в своем конструкторе и выбросите 'IllegalArgumentException', если это не подходит. Я не уверен, что это хорошая практика, но я бы сделал это так. –

+1

К сожалению, нет способа ограничить типы общих типов только примитивными числовыми типами в C# :( – MarcinJuraszek

+0

Хорошо. Это то, что я собрал, также читал документацию MSDN, но надеялся, что, возможно, у кого-то был некоторый опыт работы с ним. для ответов. Кто-то хочет опубликовать ответ, который я могу отметить? – PSGuy

ответ

0

Вы не сможете просто ограничить Int32 или любой из этих примитивных числовых типов.

Взгляните на этот вопрос: Is there a constraint that restricts my generic method to numeric types?

Обходной кажется гораздо сложнее, чем можно было бы ожидать. Отсрочка арифметических операций с каким-либо другим общим классом ...

Читайте больше для получения дополнительной информации.

+0

Полностью больше, чем я рассчитывал! – PSGuy

Смежные вопросы