如果标题不够准确,请随时将其更改为更好的名称。
所以我有一个公共的静态空白:
public static void outputDictionaryContents(Dictionary<string, int> list)
{
foreach (KeyValuePair<string, int> pair in list)
{
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}
}
我想写出它在html文件上生成的内容,它会在命令提示符下通过以下方式输出:
outputDictionaryContents(sortedDict);
但是当使用以下代码在我的html中输出它时:
tw.WriteLine("<td width\"480\">{0}</td>", outputDictionaryContents(sortedDict));
但我一直收到以下错误:
The best overloaded method match for 'System.IO.TextWriter.WriteLine(string, object)' has some invalid arguments
Argument '#2' cannon convert 'void' expression to type 'object'
所以我不能完全确定解决这个问题的最佳方法。
提前致谢。
答案 0 :(得分:2)
是的 - 看起来你希望返回字符串的方法,实际上它只是将它打印到控制台。
您不仅需要让方法返回一个字符串 - 如果使用HTML,还需要考虑如何格式化它。你几乎肯定希望以某种方式将每个值放在一个单独的行上 - 并且有各种不同的方法可以做到这一点。
您应该确定您希望自己的方法做什么,确切地说 - 是写入控制台还是生成HTML?也许你想要两种方法。
答案 1 :(得分:1)
好吧,outputDictionaryContents
的返回类型为void
,因此outputDictionaryContents(sortedDict)
是一个评估为void
的表达式。因此,它作为TextWriter.WriteLine
的参数无效。
最简单的方法是更改outputDictionaryContents
以返回string
。
public static string outputDictionaryContents(Dictionary<string, int> list) {
var keyValuePairs = list.Select(
kvp => String.Format("{0}, {1}", kvp.Key, kvp.Value)
);
return String.Join("\n", keyValuePairs);
}
但是,您可能需要添加其他格式并可能更改名称,因为它看起来像是将内容包含在HTML格式的字符串中?
答案 2 :(得分:1)
您的方法不会返回字符串 - 它会写入控制台。
您可以将其更改为直接返回字符串:
public static string GetDictionaryContents(Dictionary<string, int> list)
{
StringBuilder builder = new StringBuilder();
foreach (KeyValuePair<string, int> pair in list)
{
builder.AppendFormat("{0}, {1}{2}", pair.Key, pair.Value, Environment.NewLine);
}
return builder.ToString();
}
话虽如此,如果您要将其写入HTML输出,您可能需要重新考虑您想要写的内容。将换行符分隔信息直接写入表格单元格不会正确格式化...
您更有可能至少需要一些额外的格式,或提供单独的终结符(例如<br />
而不是新行)...
答案 3 :(得分:1)
你可能期待的最简单的事情是这样的:
public static string outputDictionaryContents(Dictionary<string, int> list)
{
return string.Join(
Console.Out.NewLine,
list.Select(pair => string.Format("{0}, {1}", pair.Key, pair.Value)).ToArray());
}
现在,实现真正的目标:
或者你可以让它更友好地生成HTML:
public static class FormatAsHtmlExtensions
{
public static IEnumerable<string> FormatAsHtml<K,V>(this IDictionary<K, V> dict, string format)
{
foreach (var pair in dict)
yield return HttpServerUtility.HtmlEncode(string.Format(format, pair.Key, pair.Value));
}
public static IEnumerable<string> FormatAsHtml<K,V>(this IDictionary<K, V> dict)
{
return FormatAsHtml("{0}, {1}");
}
}
然后您可以使用:
// ...
Response.Write(dictionary.FormatAsHtml("<p>{0}<div style='value'>{1}</div>"));
注释
答案 4 :(得分:0)
您的方法没有返回值。它是void
。这意味着它不会返回任何可能包含在字符串中的内容。
答案 5 :(得分:0)
尝试将方法outputDictionaryContents
的返回签名从void
更改为string
。
答案 6 :(得分:0)
您不想写入控制台,您想要返回该字符串,然后将其传递给tw.WriteLine。
仅供参考,静态不与它有任何关系。
所以你的功能应该是这样的:
public static string outputDictionaryContents(Dictionary<string, int> list)
{
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, int> pair in list)
{
StringBuilder.AppendFormat("{0}, {1}", pair.Key, pair.Value);
}
return sb.ToString();
}
答案 7 :(得分:0)
在静态方法outputDictionaryContents
中,将输出写入控制台,此方法没有返回值。改变这样的方法:
public static string outputDictionaryContents(Dictionary<string, int> list)
{
StringBuilder returnValue = new StringBuilder();
foreach (KeyValuePair<string, int> pair in list)
{
returnValue.AppendFormat("{0}, {1}", new object[] { pair.Key, pair.Value });
}
return returnValue.ToString();
}