6

列挙型があるとします:

type Cool = A = 'a'
          | B = 'b'

そして、私はそれをそのように印刷しようとします

printf "%A" Cool.A

次の例外が発生します。

ToString 例外: 渡される値は、Int32 などの列挙型ベースまたは列挙型の基になる型である必要があります。パラメータ名: 値

なぜこれが起こるのですか?(可能であれば)列挙型レベルでこれを修正するにはどうすればよいですか?

4

2 に答える 2

3

.Net 4.0 をターゲットとする F# 2.0 コンパイラを搭載したマシンではこれを再現できますが、.Net 3.5 以下をターゲットとする F# 2 では再現できません。

原因は今のところわかりませんが、この情報があなたや他の人が原因を絞り込んだり、回避策を見つけたりするのに役立つことを願っています.

于 2012-08-17T22:26:48.437 に答える
2

charの基準値には使わないほうがいいと思いますenum。許可されているように見えますが (
F # enums に関する MSDN の記事)、対応するC# の記事では反対のことが述べられています。さらに、古い記事では具体的に次のように述べています。char

base-type (オプション)
各列挙子に割り当てられるストレージを指定する基になる型。char 以外の整数型のいずれかです。デフォルトは int です。

のソースコードを見ると、サポートされていないSystem.Enum.ToObject(Type,Object)ことも明らかです。char

したがって、F# が の特別な処理を行ったとしてもenum<char>、それを避けて、将来の統合の問題を回避することをお勧めします。

于 2012-08-18T12:04:22.760 に答える