使用静态void方法在WriteLine中输出
本文关键字:WriteLine 输出 方法 静态 void | 更新日期: 2023-09-27 18:14:47
如果标题不够准确,请随意更改为更合适的名称
所以我有一个公共静态void: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'
所以我不完全确定解决这个问题的最好方法是什么。
嗯,是的-看起来你希望这个方法返回字符串,而实际上它只是将它打印到控制台。
你不仅需要让你的方法返回一个字符串——你还需要考虑如果你使用HTML,你将如何格式化它。几乎可以肯定,您希望以某种方式将每个值放在单独的行上,并且有各种不同的方法可以做到这一点。
你应该决定你想要你的方法做什么,确切地-它是写到控制台,还是生成HTML?
您的方法不返回字符串-它写入控制台。
你可以把它改成直接返回一个字符串:
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 />
代替换行符)…
那么,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格式字符串中包含内容?
您可能期望的最简单的事情是这样的:
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
或者你可以让它更友好一些来生成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>"));
指出- 此扩展类型适用于任何类型的字典,哈希表,键/值等(您可以通过扩展IEnumerable 为列表/数组添加类似的扩展)
- 我扔在HttpServerUtility。htmlcode 避免非html文本的转义
方法没有返回值。是void
。这意味着它不会返回任何可以包含在字符串中的内容。
尝试将方法outputDictionaryContents
的返回签名从void
更改为string
。
您不希望写入控制台,您希望返回字符串,然后将其传递给twin . 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();
}
在静态方法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();
}