3

F# から使用したい C# メソッドがあり、次のような 2 つの型付きパラメーターを受け取るとします。

public class Foo
{
    public static void GenericMethodWithTwoTypeParamsThatHaveAWhereClass<TA, TB>() where TA : TB
    {

    }
}

F# 経由で呼び出そうとすると、コンパイラは次のように文句を言います。

Foo.GenericMethodWithTwoTypeParamsThatHaveAWhereClass<System.IO.BinaryWriter, System.IDisposable>()

では、これは F# 2.0 のバグですか?

4

1 に答える 1

2

このタイプの制約は、F# ではサポートされていません。仕様は、フォームの制約t1 :> t2がとして扱われることを示しておりt1 = t2、エラーを説明しています:

この式は BinaryWriter 型を持つことが期待されていましたが、ここでは System.IDisposable 型を持っています

使い方によってTBは、使いこなせるかもしれません

GenericMethodWithTwoTypeParamsThatHaveAWhereClass<BinaryWriter, _>()

TBBinaryWriterは、前述のルールに従ってと推論されます。ただし、それが機能する場合、C# メソッドは 1 つの型パラメーターで実行できる可能性があります。

于 2012-08-20T15:35:28.693 に答える