我的C#控制台项目有问题.我想使用整个控制台屏幕在其中写入文本.例如,意味着沿着控制台的边界"绘制"边框.问题是最后一行中不必要的最后一个字符.我该怎样预防呢?
为了更好地理解,我添加了一个不需要的角色的图片.
我通过填充二维chars数组并使用以下方法转储它来绘制它.yMax是控制台窗口的高度和xMax的宽度.
private void DumpCharacters()
{
for (int y = 0; y < yMax - 1; y++)
{
string line = string.Empty;
for (int x = 0; x < xMax; x++)
{
line += characters[x, y];
}
Console.SetCursorPosition(0, y);
Console.Write(line);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试增加边框的高度,但随后,提到的字符会覆盖该位置的边框.
编辑: 对不起我的解释不清楚.当然,就像AttilaBujáki所说,我的意思是跳到最后一行.有可能阻止这种情况吗?
我正在尝试减少我拥有的控制台应用程序的内存使用量。它应该连续运行几个小时,但似乎内存使用量每秒都在逐渐增加。它确实使用多个线程,并执行各种操作,但我在某处读到,大量调用 Console.WriteLine 也会导致内存峰值。
因为应用程序不断地写入控制台,我想内存使用可能就是因为这个。不幸的是,我无法轻松清除控制台,因为我将输出重定向到监视窗口。我暂时关闭了它,但内存仍在增加,这告诉我还有其他事情需要解决。
在我开始寻找内存泄漏之前,我想知道是否有人可以确认/验证拥有数千个 Console.WriteLine 是否会导致内存泄漏,或者重定向的输出缓冲区是否已经正确处理了内存泄漏。我尝试进行搜索,但没有找到太多相关信息。
在IIS中部署我的asp.net Web应用程序后,是否有机会看到Console.WriteLine命令的输出?(不再是Visual Studio)
我查了这个问题:
Console.WriteLine在ASP.NET中的位置在哪里?
但问题是他们都谈论调试/开发环境,可以使用Visual Studio的输出窗口来检查这些行的输出.
有没有办法在不安装额外的日志记录工具(例如log4net)的情况下查看这些行的输出?
好吧基本上我想要类似的东西
Console.WriteLine(
"{0}: {1}/{2}hp {3}/{4}mp {5}",
character.Identifier,
character.CurrentHealth,
character.MaxHealth,
character.CurrentMagic,
character.MaxMagic,
character.Fatigue
);
Run Code Online (Sandbox Code Playgroud)
然后有character.Identifier(基本上是一个名字)有一定数量的字母,如果需要它将用空格替换,以便在打印
Josh: 20/20hp 20/20mp 3
Run Code Online (Sandbox Code Playgroud)
要么
J: 20/20hp 20/20mp 3
Run Code Online (Sandbox Code Playgroud)
但HP和然后mp和其他一切都在排队.我知道它可能是{0:}中的一个,但我无法找出一个有效的
我正在测试我的run()函数,以确保它具有方法结束时填充的所有正确的东西.我从我们的数据库中填充了4个字段,两个字符串和两个IEnumerable(字符串).我的想法是为我从数据库中提取的所有人打印出来.
当我只打印字符串字段时,一切正常.但是,当我尝试添加Enumerables时,根本没有任何打印.我也打印一个计数器,所以我知道该程序仍在运行和工作.由于空间或其他原因,控制台是否决定不打印任何东西?
这是执行它的代码:
int i = 0;
foreach (Contact contact in Contact.LoadWithPredicate(getAll))
{
-------other code to populate fields---------
i ++;
Console.WriteLine(i);
//Turn the Enumerables into strings for printing
string firstEnumAsString = String.Join(", ", firstEnumerable.ToArray());
string secondEnumAsString = String.Join(", ", secondEnumerable.ToArray());
Console.WriteLine("Email: " + firstString+ ", correspondance: " + secondString+ ", PAM addresses: " + firstEnumAsString+ ", famousPeople: " + secondEnumAsString);
}
Run Code Online (Sandbox Code Playgroud)
所以,作为我的输出,每当我运行上面的代码时,我得到这样的输出:
1
2
Email: foo@bar.com, correspondance: John, PAM addresses: bar@foo.com, famousPeople: foo, bar, foo
3
4
etc
Run Code Online (Sandbox Code Playgroud)
问题是,总共只有两个人(~425)出现,其余的行只是数字.我不应该至少得到字符串"电子邮件"和",通信"?看起来Console似乎决定不做任何事情.而且我知道代码必须到达它,因为它在我调用Console.WriteLine()之前打印出整数.
另一方面,每当我要求打印两个字符串字段时,控制台就会显示所有425个用户的两个字段,就在它们相应的整数之后.有谁知道这里发生了什么?TIA
我们通常在GUI(表单)等代码的上层捕获异常.
但我通常有这种代码
try
{
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
MessageBox.Show("Application has encountered error....");
}
Run Code Online (Sandbox Code Playgroud)
我可以在没有标识符的情况下捕获(Exception)因为我不需要运行时的消息,但是对于调试构建,确保在catch语句中断开是很方便的.所以我通常会编写一个Console.WriteLine来防止对未使用的ex变量发出很多警告.我的代码中有很多Console.WriteLine(ex.Message)的情况.这种性价比会降低吗?
注意:更改了标题"Console.WriteLine(ex.Message)是否具有性能成本?" "调用Console.WriteLine(ex.Message)以防止警告消息"
可能的重复:
我可以将 C# 字符串值转换为转义的字符串文字吗
如何打印字符串(通过 Console.WriteLine()),以便逐字打印字符串中可能存在的任何/所有转义序列?
例子:
string s = "This \r\n has \t special \\ characters.";
Console.WriteLine(s);
/* Output (I don't want this)
This
has special \ characters.
*/
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
This \r\n has \t special \\ characters.
Run Code Online (Sandbox Code Playgroud)
请注意,在我的应用程序中,我从第三方接收字符串(其中包含转义序列) - 即如果我自己创建字符串,我知道我可以这样做
string s = @"This \r\n has \t special \\ characters.";
Run Code Online (Sandbox Code Playgroud) 下面是我一直在努力的一场垃圾游戏.我已经进入了一个我无法通过的基本封锁.
在这部分代码中,我无法找到一种方法将来自我的数组的数字转换为它们对应的面和套装.
Console.WriteLine("A " + deck[Game.DrawCard(deck), 0] + " of " + deck[Game.DrawCard(deck), 1] + " was drawn from the deck and then placed on top");
Run Code Online (Sandbox Code Playgroud)
我可以模糊地想象一个使用一系列变量和if语句的路线,但我真的怀疑没有一个明显的,更简单的方法.
其余的代码看起来像这样
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CribbageInCSharp
{
class Program
{
static void Main(string[] args)
{
//Variables//
int currentPlayer;
short score1 = 0;
short score2 = 0;
short round = 1;
int[,] deck = new int[52, 2];
Console.WriteLine("Welcome" + "\r" + "\r" + "Enter Number of Players …Run Code Online (Sandbox Code Playgroud) 在ac#console应用程序中,有没有办法在文本通过Console.WriteLine和写入控制台时获得通知Console.Write?
每当此事件触发时,应该可以执行诸如在写入文本之前更改文本,将其重定向到文件或更改当前Console.ForegroundColor等操作.
我知道实现这一目标的一个简单方法是永远不要Console.WriteLine直接调用,而是始终调用我自己的自定义包装器方法.
另一种更好的方法是编写自定义ConsoleTraceListener,并通过输出所有文本trace.TraceInformation().我已经做到了,它运作得很好.
但是,如果Console.WriteLine调用位于另一个应保持不变的程序集内,则此方法无效.
那么有没有办法在Console.WriteLine不修改调用这些调用的代码的情况下对调用做出反应?
一个简单的问题:如何使用VS.中的C#使用Console.Writeline()在CMD中显示字符串?我知道你使用+用于整数和浮点数.但是你对字符串使用了什么?这就是我所拥有的:
private string productName;
public void GetItemData()
{
ShowReciept();
}
private void ReadItem()
{
Console.WriteLine("Enter the product's name: ");
productName = Console.ReadLine();
}
private void ShowReciept()
{
Console.WriteLine("**** Name of product:", productName);
}
Run Code Online (Sandbox Code Playgroud)
在void ShowReciept()中,它会在Console.WriteLine命令中写出所有内容,并删除产品名称.所以它只是产品名称应该是空白.