-3

U関数の戻り値に異なるジェネリック パラメーター タイプ ( ) を持ちT、ローカル パラメーターに別のジェネリック パラメーター タイプを既に持っているようなことは可能ですか?

私が試してみました:

private static U someMethod <T,U>(T type1, Stream s)

private static U someMethod <T><U>(T type1, Stream s)

編集: 私たちは試すことに同意しました:

private static U someMethod <T,U>(T type1, Stream s)

public static T someMethodParent<T>(Stream stream)
{

   U something = someMethod(type1, stream);  

      ...
}
4

5 に答える 5

9

private static U someMethod <T,U>(T type1, Stream s)は正しい構文です。

http://msdn.microsoft.com/en-us/library/twcad0zb%28v=vs.80%29.aspx

コメントでJavaSaが述べたように、使用法から推測できない場合は実際のタイプを提供する必要があるため、

private static U someMethodParent<T>(T Type1, Stream s)
{
    return someMethod<T, ConcreteTypeConvertibleToU>(type1, s);
}
于 2012-12-21T12:06:18.133 に答える
5

これはうまくいくはずです。

private static U someMethod<T, U>(T type1, Stream s)
{
   return default(U);
}
于 2012-12-21T12:06:59.640 に答える
2

これは機能します:

private static TOutput someMethod<TInput, TOutput>(TInput from);

MSDNを見てください

于 2012-12-21T12:07:02.730 に答える
1

わかりました、すべてのコメントを読んだ後、あなたには2つのオプションがあるように見えます...

  1. someMethodParent の本体で someMethod から必要な戻り値の型を明示的に指定します。

    public static T someMethodParent<T>(Stream stream)
    {
        TheTypeYouWant something = someMethod<T, TheTypeYouWant>(type1, stream);
        ...
        return Default(T);
    }
    
  2. someMethodParent の本体で someMethod の戻り値の型として object を使用しますが、使用可能な型にキャストする必要があります

    public static T someMethodParent<T>(Stream stream)
    {
        object something = someMethod<T, object>(type1, stream);
        ...
        TheTypeYouNeed x = (TheTypeYouNeed) something;
        // Use x in your calculations
        ...
        return Default(T);
    }
    

どちらも他の回答へのコメントで言及されていますが、例はありません。

于 2012-12-21T13:32:32.537 に答える
0

someMethodParent で U を使用するには、someMethod で行ったように指定する必要があります。

public static T someMethodParent<T, U>(T type1, Stream stream)

メソッド本体で U を someMethod の戻り値の型として使用できるようになりました...

{
    U something = someMethod<T, U>(type1, stream);
    return Default(T);
}
于 2012-12-21T13:04:47.580 に答える