目前的最佳做法是在代码中使用Environment.NewLine,以便开始一个新行。我希望能够在我的代码中使用别名或重载运算符,以便更简洁。 而不是:
MessageBox.Show("My first line here" + Environment.NewLine + "My second line here");
我想有这样的事情:
MessageBox.Show("My first line here" + NL + "My second line here");
如何轻松地将其设置为IDE设置或整个项目/命名空间?
我想到了别名或重载运算符,但不确定是否有一种比Environment.NewLine更简洁的全局别名的好方法,而且之前我从未做过重载运算符,所以不是熟悉那些来龙去脉。
答案 0 :(得分:5)
简单的缩短方法。在您的一个实用程序集中弹出此类:
namespace MyCompany
{
public static class E
{
public static readonly string NL = System.Environment.NewLine;
}
}
然后你可以愉快地使用它:
using MyCompany;
MessageBox.Show("My first line here" + E.NL + "My second line here");
答案 1 :(得分:3)
我可能会建议您使用扩展方法吗?
public static class StringExtensions
{
public static string NextLine(this string s, string next)
{
return s + Environment.NewLine + next;
}
public static string NextLine(this string s)
{
// just add a new line with no text
return s + Environment.NewLine;
}
}
用法:
var lines = "My first line here".NextLine("My second line here.")
.NextLine("third line").NextLine();
当然,如果您愿意,可以将其称为NL
- 但可能并不清楚。
答案 2 :(得分:2)
在少数StringBuilder.AppendLine()
的情况下使用Environment.NewLine
:
var sb = new StringBuilder();
sb.AppendLine("My first line here");
sb.AppendLine("My second line here");
MessageBox.Show(sb.ToString());
答案 3 :(得分:2)
编写一个类,以Environment.NewLine
为成员提供namespace MyNamespace
{
public static class Env
{
public static readonly string NL = Environment.NewLine;
}
}
的值:
using
然后编写以下using E = MyNamespace.Env;
指令:
using
您可以将此struct
指令添加到您的默认新类模板和您使用的任何其他模板(新interface
,新E.NL
等)。
以下是我的计算机上新类模板的位置,作为开始使用的示例:
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Code \ 1033
完成此操作后,您应该可以在任何地方Environment.NewLine
代替{{1}}。
答案 4 :(得分:1)
别名不起作用 - 您可以为命名空间或类型添加别名,但不能为类型的属性设置别名。所以这有效:
using NL = System.Environment;
class Program
{
static void Main(string[] args)
{
var s = NL.NewLine;
}
}
但这不是:
// returns: The type name 'NewLine' does not
// exist in the type 'System.Environment' error
using NL = System.Environment.NewLine;
重载运算符是一个有趣的想法,但是你必须使用String
之外的其他东西。通常人们会创建一个struct
,它可以获取基本字符串值,然后重载运算符。如果您想要做的只是替换Environment.NewLine
,那么不值得痛苦。你最好按照别人的建议使用静态扩展。
另一种替代方法(如果你使用NL
设置了死机)是从公共父类中删除框架中的所有类,这些类可以具有以下属性:
public class BaseParentClass
{
public string NL
{
get { return System.Environment.NewLine; }
}
}
然后在所有后代类的代码中,您的代码看起来就像:
public class ChildOfBaseParent
{
public void Show_A_Message()
{
MessageBox.Show("My first line here" + NL + "My second line here");
}
}
当然,如果你的课程没有从一个共同的父母那里下来,那么为了方便起见,你必须重构代码库。您需要为winform类创建一个并行的System.Windows.Forms.Form父级,以使其具有相同的行为。
但如果你有很多涉及NL的字符串连接,那绝对值得痛苦...
答案 5 :(得分:1)
using static System.Environment;
然后您就可以将其用作NewLine
答案 6 :(得分:0)
添加到@abatishchev响应,您可以使用StringBuilder类做很好的事情。
StringBuilder builder = new StringBuilder();
builder.Append("List:");
builder.AppendLine();
builder.Append("1. Boat")
builder.Append("2. Car").AppendLine();
builder.Replace("Boat", "Jet");