2010-09-22 3 views
0

Может ли кто-нибудь помочь мне в использовании Где для общих типов? Я пытался создать функцию, которая делает ST с несколькими типами double или int, поэтому я сказал, что это должна быть общая функция. Но когда я пытаюсь присвоить значение переменным этого родового типа, я не могу, потому что это не числовой тип. Кроме того, я не могу использовать Where to inherit generic type из int или double типов данных.Наследование в родовых типах

Вот код:
public static T[,] Unit(int n) where T : PROBLEM
{

T[,] mat = new T[n, n]; 

    for (int i = 0; i < n; i++) 
     mat[i, i] = (T)1;  

    return mat; 

}

Может кто-нибудь помочь?

+1

Можете ли вы разместить пример? – asawyer

+0

Спасибо, Майкл, за то, что поправил меня. :) –

+0

Что такое 'ST' и делает ли это с номером? – Gabe

ответ

1

К сожалению, одним из недостатков C# является то, что вы не можете легко создавать общие числовые алгоритмы. Вы можете отчасти взломать вокруг него, как этот пример из MSDN:

public abstract class BaseCalculator<T> 
{ 
    public abstract T Add(T arg1,T arg2); 
    public abstract T Subtract(T arg1,T arg2); 
    public abstract T Divide(T arg1,T arg2); 
    public abstract T Multiply(T arg1,T arg2); 
} 
public class IntCalculator : BaseCalculator<int> 
{ 
    public override int Add(int arg1, int arg2) 
    { 
     return arg1 + arg2; 
    } 
    //Rest of the methods 
} 

Но вообще говоря, библиотеки .Net просто отдельную реализацию для такого рода вещи, а не пытаться использовать дженерики.

0

Вы можете ограничить свой типовой параметр типа struct. Struct представляет тип значения типа int или double. Вот пример из MSDN article:

public class MyClass<T> where T : struct 

{...} 
1

Не уверен, что это «Где» является, к которому вы имеете в виду, но вы можете объявить общую функцию

public T Calculate<T>(T x, T y) where T : IComparable<T> 
{ 
    // do calculations 
} 

я считаю int и double как реализовать IComparable<T> ,

+0

Его не работает ... потому что я пытаюсь назначить значения и делать ST, но в сообщении об ошибке говорится, что я не могу преобразовать int в T ... –

1

Система ограничений в Generics по-прежнему довольно крупнозернистая. Его все еще тупой инструмент с относительно небольшим количеством вариантов на выбор. Более богатый набор функций для выражения ограничений по параметрам типа позволит разрабатывать всевозможные сложные алгоритмы, такие как программирование на основе шаблонов и т. Д.

Если вы только скажете мне, что T - тип рубашки, который я смотрю на ... там я могу с этим справиться. Но если T - это не только рубашка, но на самом деле она носит гудок с некоторыми свойствами int [] со значениями в верхних 30-х и определенными событиями, которые я могу подписаться и обрабатывать с помощью пользовательских кодов, тогда я думаю, что это сделает программирование немного более увлекательным и оживленно.

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