Henehefu 用 ウィキ

メニュー



- Views

最近の更新

取得中です。

FSharpとCSharpの比較


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

F#とC#の比較

直感的に思いつかない物のメモ

変数と定数

定数

// F#
let x = 10
 

// C#
const int x = 10;
 

変数

// F#
let mutable x = 10
x <- 20
 

// C#
int x = 10;
x = 20;
 

演算

ビット演算

// F#の場合
// and
0x11 &&& 0xFF
 
// or
0x11 ||| 0xFF
 
// xor
0x11 ^^^ 0xFF
 
// 反転
~~~ 0x11
 

// C#の場合
// and
0x11 & 0xFF
 
// or
0x11 | 0xFF
 
// xor
0x11 ^ 0xFF
 
// 反転
~0x11
 

シフト演算

// F#
1 <<< 10
1 >>> 10
 

// C#
1 << 10
1 >> 10
 

キャスト

objにキャスト

ボクシング
// F# 
let o = box 100
 

// C#
var o = (object)100;
 

objからintにキャスト

アンボクシング
// F#
let i = unbox<int> o
 

// C#
var i = (int)o;
 

アップキャスト

子クラスから親クラスへ
// F#
let abc = ("abc" :> obj)
 

// C#
var abc = (object)"abc";
 

ダウンキャスト

親クラスから子クラスへ
// F#
let text = (abc :?> string)
 

// C#
var text = (string)abc;
 

匿名(関数|メソッド)

// F#
fun x -> x * x
 

// C#
x => x * x;
 

拡張メソッド

定義

// F#
type String with
    member path.GetExtension = 
        Path.GetExtension(path)
 

// F#(C#から呼び出せるバージョン)
open System.Runtime.CompilerServices
 
[<Extension>]
module public MyExtensions =
    [<Extension>]
    let GetExtension path = Path.GetExtension(path)
 


// C#
public static class MyExtensions
{
    public static string GetExtension(this string path)
    {
        return Path.GetExtension(path);
    }
}
 

使い方

// F#
let ext = @"c:\doc\hoge.txt".GetExtension()
 

// C#
var ext = @"c:\doc\hoge.txt".GetExtension();
 

タグ一覧