コードを使用してIList<T>
をFSharpList<T>
に変換し、リストの値をXMLに書き込みます。私は自分のリストを作成する上記のコードを使用しFSharpList <string> to IList <string> to XML
public static class Interop
{
public static FSharpList<T> ToFSharpList<T>(this IList<T> input)
{
return CreateFSharpList(input, 0);
}
private static FSharpList<T> CreateFSharpList<T>(IList<T> input, int index)
{
if(index >= input.Count)
{
return FSharpList<T>.Empty;
}
else
{
return FSharpList<T>.Cons(input[index], CreateFSharpList(input, index + 1));
}
}
}
var fsharp_distinct = distinctWords.ToFSharpList();
var distinct_without_stopwords = Module2.stopword(fsharp_distinct);
foreach (string wd in distinct_without_stopwords)
colwordfreq.Root.Add(new XElement(wd));
Infactは、XMLは、あまりにも書かれてますが、単にループを終了する前にそれがSystem.NullReferenceException
を与えています。しかし、F#関数が同じコードを使用してTuple<string, int>
を返したときに、Tuple値をXMLに書き込む際に問題はありませんでした。
EDIT:私は上記の質問で正しくありませんでした。ヌル点の例外が実際にこのコードから来た:
foreach (Tuple<string, int> pair in list2)
colwordfreq.Root.Element(pair.Item1).Add(new XElement("freq", pair.Item2));
をしかし、私は条件
if (colwordfreq.Root.Element(pair.Item1) != null)
を追加したときには、その例外を与えるものではありません。
例外は別のセクションのものだと思います。私はデバッグでそれを見つけました。 – codious
@pad質問を編集しました。ヌル参照は、単語という単語を返すタプルから来ました。 – codious
'pair.Item1'を' pair.Item1'に追加する前にルートノードに 'pair.Item1'を追加してみませんか?この方法では、安全で最初の文字列リストを作成する必要はありません。 – pad