列挙型があるとします:
type Cool = A = 'a'
| B = 'b'
そして、私はそれをそのように印刷しようとします
printf "%A" Cool.A
次の例外が発生します。
ToString 例外: 渡される値は、Int32 などの列挙型ベースまたは列挙型の基になる型である必要があります。パラメータ名: 値
なぜこれが起こるのですか?(可能であれば)列挙型レベルでこれを修正するにはどうすればよいですか?
.Net 4.0 をターゲットとする F# 2.0 コンパイラを搭載したマシンではこれを再現できますが、.Net 3.5 以下をターゲットとする F# 2 では再現できません。
原因は今のところわかりませんが、この情報があなたや他の人が原因を絞り込んだり、回避策を見つけたりするのに役立つことを願っています.
char
の基準値には使わないほうがいいと思いますenum
。許可されているように見えますが (
F # enums に関する MSDN の記事)、対応するC# の記事では反対のことが述べられています。さらに、古い記事では具体的に次のように述べています。char
base-type (オプション)
各列挙子に割り当てられるストレージを指定する基になる型。char 以外の整数型のいずれかです。デフォルトは int です。
のソースコードを見ると、サポートされていないSystem.Enum.ToObject(Type,Object)
ことも明らかです。char
したがって、F# が の特別な処理を行ったとしてもenum<char>
、それを避けて、将来の統合の問題を回避することをお勧めします。