2016-12-15 9 views
0

私はあなたに挿入する特定の長さの配列を作成し、それを同時にソートする汎用メソッドを作りたかったのです。 はので、私は、ジェネリックTにint型からそれを転送して、これは、これまでのコードであるT. の2つの変数を比較しようとしたときに、私は問題につまずい:一般的な値の比較

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication7 
{ 
class Program 
{ 
    public static T[] insertWhileSorting<T>(int x) 
    { 
     T[] arr = new T[x]; 
     for (int i = 0, k; i < arr.Length; i++) 
     { 
      T value = (T)Convert.ChangeType(Console.ReadLine(), typeof(T)); 

      for (k = i; k > 0 && value.CompareTo(arr[k - 1]) < 0; --k) arr[k] = arr[k - 1]; 

      arr[k] = value; 
     } 
     return arr; 
    } 
    static void Main(string[] args) 
    { 
     int[] arr = insertWhileSorting<int>(5); 
     Console.WriteLine(string.Join(", ", arr)); 
    } 
    } 
} 

とはい私は(私は思う)知っています配列に値を挿入して並べ替えるだけの方が良いですが、割り当てのためにそれをやっています

+3

そして、何*です*あなたがつまずいている問題? – HimBromBeere

+0

'T'が' IComparable 'を実装するか、' IComparer 'を渡すように制約を追加する必要があります。 – juharr

答えて

3

TIComparable<T>と実装する必要があります。問題のクラスはメソッドを実装しCompareTo

public static T[] insertWhileSorting<T>(int x) where T: IComparable<T> 

IComparable要求:あなたはTIComparable<T>を実装するために持っていることを条件とタイプTを制限することができwhereキーワードを使用しました。今、コンパイラは

「T」は「のCompareTo」の定義が含まれていないことを不満を停止すべきと拡張メソッド「のCompareTo」を見つけることができません

EDIT:

この行は得ることができますもし簡単にトラブルに:

T value = (T)Convert.ChangeType(Console.ReadLine(), typeof(T)); 

ユーザーは単ににつながる"break"のような文字列を入力することができますので、あなたが最初にこのようにそれを呼び出した場合:

int [] adda = insertWhileSorting<int>(5); 

あなたはtrycatch句にこの全体の変換やソートルーチンを入れて、それがクラッシュしたときに警告を与えることができます:

for (int i = 0, k; i < arr.Length; i++) 
{ 
    try 
    { 
     T value = (T)Convert.ChangeType(Console.ReadLine(), typeof(T)); 

     for (k = i; k > 0 && value.CompareTo(arr[k - 1]) < 0; --k) arr[k] = arr[k - 1]; 

     arr[k] = value; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("That stuff was not convertible!"); 
     Console.WriteLine("Error: " + ex.Message); 
    } 

} 
+2

良くなるでしょうか?ICompareable CSharpie

+0

@CSharpieはthx –

+0

@ Superminefudgeに問題はありません。 –

関連する問題