ジェネリック配列のC#拡張機能を作成したいのですが、常にエラーが発生します。これが私がstring[]の拡張を作成するために使用したコードです。これはうまく機能します:
public static string[] Add(this string[] list, string s, bool checkUnique = false, bool checkNull = true){
if (checkNull && string.IsNullOrEmpty(s)) return list;
if (checkUnique && list.IndexOf(s) != -1) return list;
ArrayList arr = new ArrayList();
arr.AddRange(list);
arr.Add(s);
return (string[])arr.ToArray(typeof(string));
}
私が本当に望んでいるのは、よりジェネリックにすることです。これにより、文字列だけでなく他のタイプでも機能します(したがって、すべての文字列の詳細をジェネリックTに置き換えようとしました):
public static T[] Add(this T[] list, T item, bool checkUnique = false){
if (checkUnique && list.IndexOf(item) != -1) return list;
ArrayList arr = new ArrayList();
arr.AddRange(list);
arr.Add(item);
return (T[])arr.ToArray(typeof(T));
}
しかし、コードはコンパイルされません。「エラーCS0246:タイプまたは名前空間名 `T'が見つかりませんでした。usingディレクティブまたはアセンブリ参照がありませんか?」というエラーが発生します。
私はすでに別の解決策を試しました:
public static void AddIfNotExists<T>(this ICollection<T> coll, T item) {
if (!coll.Contains(item))
coll.Add(item);
}
しかし、別のエラーが発生しています。「エラーCS0308:非ジェネリック型の`System.Collections.ICollection'は型引数と一緒に使用できません」
ちなみに、私はUnity C#を使用しています(これは3.5に対してコンパイルされていると思います)。誰かが私を助けることができますか?