Я только что написал простой метод, который C# может видеть, но вызов его (даже с допустимыми аргументами) подбрасывается во время выполнения.Почему метод StaticResolvedTypeParameter вызывает компиляцию при сбое во время выполнения?
пример, который терпит неудачу во время выполнения:
F #:
namespace Library1
type Class1() =
member __.Foo = "F#"
module MyModule =
// fails at run-time
let inline fOnly (x:^a) : string = (^a:(member Foo: _) x)
// works from C# and F# so I know it's not a problem with my stp
let testFOnly() = fOnly (Class1())
C# потребителя:
namespace ConsoleApplication1
{
class Program
{
var class1 = new Library1.Class1();
// NotSupportedException
var result = Library1.MyModule.fOnly(class1);
Console.ReadLine();
}
}
Почему это компиляции, затем не во время выполнения? Я что-то делаю неправильно или должен ли я предположить, что любая попытка вызвать метод stp из C# всегда будет терпеть неудачу? Должен ли я тогда attempt to hide them from C#?
C#, чтобы назвать это компилирует. Кроме того, следующие компиляции и работы 'let inline add x y = x + y' вызывается из C# как' var inlinedAdd = Library1.MyModule.add (1,2); 'так что вы можете вызывать' inline' функции из C#? –
Maslow
@Maslow - это меня удивляет - возможно, компилятор создает резервную версию без встроенной версии, где это возможно? –
что меня удивляет, это то, что люди поддержали ответ, который потребовал простой функции добавления, чтобы опровергнуть. – Maslow