Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C调用F#`printfn`#_C#_.net_F#_String Formatting - Fatal编程技术网

C# 从C调用F#`printfn`#

C# 从C调用F#`printfn`#,c#,.net,f#,string-formatting,C#,.net,F#,String Formatting,如何从C代码直接调用F#printfn?我看到有一个 T PrintfModule.PrintFormat<T>(PrintfFormat<T, TextWriter, Unit,Unit> format) 在另一个C#程序集中,如何通过调用与printfn“%A”x相当的代码来打印x,使用PrintfModule.PrintFormatLine?我已经创建了F#file Program.fs: open System type R = { r: R } let re

如何从C代码直接调用F#
printfn
?我看到有一个

T PrintfModule.PrintFormat<T>(PrintfFormat<T, TextWriter, Unit,Unit> format)
在另一个C#程序集中,如何通过调用与
printfn“%A”x
相当的代码来打印
x
,使用
PrintfModule.PrintFormatLine

我已经创建了F#file Program.fs:

open System

type R = { r: R }
let rec x = { r = x }

[<EntryPoint>]
let main argv =
    printfn "%A" x
    0
开放系统
类型R={R:R}
设rec x={r=x}
[]
让主argv=
printfn“%A”x
0
编译后反编译为C#:

使用Microsoft.FSharp.Core;
...
公共静态程序.rx{
获取{return\u0024Program.x\u00406;}
}
[入口点]
公共静态int main(字符串[]argv)
{
\u0024Program.init\u0040=0;
int init=\u0024Program.init\u0040;
超顶级操作符
.PrintFormatLine(
(打印格式)
新的printformat(“%A”)).Invoke(Program.x);
返回0;
}
公共密封R类:IEquatable、IStructuralEquatable、IComparable、IComparable、IStructuralComparable
{
内部程序。R\u0040;
公共程序.R{get{返回此.R\u0040;}
公共R(Program.rr){this.R\u0040=R;}
}
希望它能给你一个提示。我已经创建了F#file Program.fs:

open System

type R = { r: R }
let rec x = { r = x }

[<EntryPoint>]
let main argv =
    printfn "%A" x
    0
开放系统
类型R={R:R}
设rec x={r=x}
[]
让主argv=
printfn“%A”x
0
编译后反编译为C#:

使用Microsoft.FSharp.Core;
...
公共静态程序.rx{
获取{return\u0024Program.x\u00406;}
}
[入口点]
公共静态int main(字符串[]argv)
{
\u0024Program.init\u0040=0;
int init=\u0024Program.init\u0040;
超顶级操作符
.PrintFormatLine(
(打印格式)
新的printformat(“%A”)).Invoke(Program.x);
返回0;
}
公共密封R类:IEquatable、IStructuralEquatable、IComparable、IComparable、IStructuralComparable
{
内部程序。R\u0040;
公共程序.R{get{返回此.R\u0040;}
公共R(Program.rr){this.R\u0040=R;}
}

希望它能给你一个如何做的提示。

AlexAtNet的简短版本是:

PrintfModule
.PrintFormatLine(
新打印格式(“%A”))
.Invoke(Program.x);

虽然我不明白为什么需要铸造
(printformat)
。如果有人知道原因,请告诉我。

AlexAtNet的简短版本是:

PrintfModule
.PrintFormatLine(
新打印格式(“%A”))
.Invoke(Program.x);
虽然我不明白为什么需要铸造
(printformat)
。如果有人知道原因,请告诉我

using Microsoft.FSharp.Core;
...

public static Program.R x {
    get { return \u0024Program.x\u00406; }
}

[EntryPoint]
public static int main(string[] argv)
{
    \u0024Program.init\u0040 = 0;
    int init = \u0024Program.init\u0040;
    ExtraTopLevelOperators
      .PrintFormatLine<FSharpFunc<Program.R, Unit>>(
          (PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit>)
          new PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit, Program.R>("%A")).Invoke(Program.x);
    return 0;
}

public sealed class R : IEquatable<Program.R>, IStructuralEquatable, IComparable<Program.R>, IComparable, IStructuralComparable
{
    internal Program.R r\u0040;
    public Program.R r { get { return this.r\u0040; } }
    public R(Program.R r) { this.r\u0040 = r; }
}
PrintfModule
    .PrintFormatLine(
        new PrintfFormat<FSharpFunc<Program.R, Unit>, TextWriter, Unit, Unit, Program.R>("%A"))
    .Invoke(Program.x);