1

私は現時点で持っています:

public HashSet<int> UniqueData { get; private set; }

別のプロパティが設定されている場合はそれを作成したい

public HashSet<string> UniqueData { get; private set; }

したがって、コンストラクターでは次のようになります

if (MyProperty)
  UniqueData = new HashSet<string>();
else
  UniqueData = new HashSet<int>();

プロパティを次のように宣言する方法はありますか:

  public HashSet<T> UniqueData { get; private set; }
4

5 に答える 5

3

型だけが異なる 2 つのプロパティを宣言することはできません。HashSet<T>クラス全体を on でジェネリックにする場合は、構文を使用できますT

class Example<T> {
    public HashSet<T> Unique {get;set;}
    public Example(HashSet<T> hs) {
        Unique = hs;
    }
}
public static void Main() {
    Example<int> a = new Example<int>(new HashSet<int>());
    Example<string> b = new Example<string>(new HashSet<string>());
}
于 2012-05-28T11:48:55.450 に答える
1

残念ながら、それを行う方法はありません。プロパティのデータ型は、コンパイル時に宣言する必要があります。

タイプが であるクラスをT作成し、それTをプロパティのT

public class TClass<T>
{
    public HashSet<T> UniqueData { get; set; } 
}

そしてそれを次のように呼び出します

public static void Main() 
{
    TClass<int> a = new TClass<int>(){ UniqueData = new HashSet<int>()};
    TClass<string> b = new TClass<string>(){ UniqueData = new HashSet<string>()};
}

さらに、private setクラス内からのみ値を設定できる場合。

于 2012-05-28T11:52:31.877 に答える
1

戻り値の型を取得するには、おそらくクラス レベルでこれを行う必要があります。HashSet<T>

public class MyClass<T>
{

  #region ctors
  public MyClass()
  {
    this.UniqueData = new HashSet<T>();
  }
  #endregion

  public HashSet<T> UniqueData { get; private set; } 
}

使用法:

MyClass cint = new MyClass<int>();
cint.UniqueData.Add(1);

MyClass cstr = new MyClass<string>();
cstr.UniqueData.Add("something unique");
于 2012-05-28T11:52:53.377 に答える
0

public HashSet<object> UniqueData { get; private set; }. 型はコンパイル時に指定する必要があるため、強い型付けシステムはこの場合には役に立ちません。

于 2012-05-28T11:52:09.443 に答える
0

あなたの設計に誤りがあると思います。HashSet に格納されているデータの種類に関係なく、プログラムの残りの部分で使用したい HashSet の機能はどれですか?

次に、HashSet 自体ではなく、HashSet のこれらの機能を (たとえば、Adapter クラスまたは一連のプロパティによって) 公開します。

于 2012-05-28T11:55:28.053 に答える