、あなたが書くことができます:
let func (param:(int64 * string) list) =
[ for n, s in param -> n, s, "new val" ]
は、私はあなたがC#で1と同じタイプを取得することを確認するために注釈(int64 * string) list
を追加しました。それを追加しなかった場合、F#コンパイラはその関数を汎用であると推論します。なぜなら、実際にはタプルの最初の2つの要素の型が何であるかは問題ではないからです。注釈は、読みやすくなるかもしれないparam:list<int64 * string>
を使用してC#形式の表記法で記述することもできます。
あなたは(通常はF#で推奨されていない).NET List
タイプを使用したい場合は、F#のエイリアスResizeArray
を使用して書き込むことができます。
let func (param:(int64 * string) ResizeArray) =
ResizeArray [ for n, s in param -> n, s, "new val" ]
これは、F#のリストを作成し、それを変換し、 .NET List<T>
タイプ。これにより、C#バージョンとまったく同じパブリックILシグネチャが得られるはずですが、F#固有の型の使用をお勧めします。
2番目の例は、命令番号F#を使用して実装できます(for
を使用してC#のような要素を繰り返し処理します)。これはC#とまったく同じILを生成しますが、後でF#コードを最適化する必要がある場合には、これは主に有効です。だから私は(それが:-)も長いです)このバージョンをお勧めしません:
let func (param:(int64 * string) ResizeArray) =
let res = new ResizeArray<_>()
for n, s in param do
res.Add(n, s, "new val")
res
あなたはまた、List.map
のような高階関数を使用して書くことができます:ここで
let func (param:(int64 * string) list) =
params |> List.map (fun (n, s) -> n, s, "new val")