これは本当に奇妙なことです。私はちょうど何かばかなことをしたことを恐れていますが、私はそれを理解できません。F#が機能しなくなり、パラメータ値としてnullが返される
私はそれがNone
ためにヌル印刷に関係していないよ(私は最初のパラメータとしての機能some
へNone
を渡しているが、関数の実行時、parentNode
の値がnullの場合、関数パラメータの値がNone
nullではありません)。 parentNodeがnullなので、print関数の行でヌル参照エラーが発生することになります。私はargsをタプルして順序を変更しようとしましたが、それは助けになりませんでした。私はこれがカリングと関係があることを疑っていますが、私は迷っています...
実際のURL値を会社の問題の空の文字列に置き換えなければなりませんでしたが、xsdそれがここに
に役立つコードの場合:残念ながら
#light
open System
open System.Xml
open System.Net
open System.Collections.Generic
type StartResult =
| Parameters of XsdParserParameters
| Xsd of Xsd
and Xsd(text) =
let rows = new List<string>()
member this.Text
with get() = text
member this.Rows
with get() = rows
and XsdParserParameters() =
let mutable url = ""
member this.Url
with get() = url
and set(value) = url <- value
member this.Start() =
try
use client = new WebClient()
let xsd = client.DownloadString(this.Url)
StartResult.Xsd(Xsd(xsd))
with e ->
StartResult.Parameters(this)
let processor() =
let parameters = XsdParserParameters()
parameters.Url <- ""
match parameters.Start() with
| StartResult.Parameters(xpparams) ->
//some error
()
| StartResult.Xsd(xsd) ->
let rec some (parentNode : XmlNode option) (node : XmlNode) =
let a =()
for subNode in node.ChildNodes do
match subNode.LocalName with
| "complexType" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| "sequence" ->
some parentNode subNode
| "element" ->
xsd.Rows.Add(
sprintf
"%O~%s~%d~%d~%s~%s~%O"
parentNode
subNode.Value
1
1
(subNode.Attributes.GetNamedItem("name").Value)
""
false)
some (Some(subNode)) subNode
| _ ->
()
let xdoc = new XmlDocument();
xdoc.LoadXml(xsd.Text)
some (None) (xdoc.DocumentElement)
processor()
printfn "Done..."
Console.ReadLine() |> ignore
null参照例外はどの行で取得されていますか? 'sprintf"%O "null"はうまく動作するはずです。私は 'parentNode'への他の参照を見ません。エラーがどこから来ているのでしょうか? – Guvante