1

我有 3 个字符串,我想将它们放在 3 行的标签中。标签是塞进去的,需要固定高度,所以我只希望每个字符串占 1​​ 行。也就是说,我想将每个字符串的长度保持在 ~20 个字符。问题是,我得到一个异常抛出的字符串是 < 20 个字符,所以我需要在将它写入标签之前评估它是否是。

我尝试的是:

mobPartLabel.Text = String.Format(
    "String 1: {0} \nString 2: {1} \nString 3: {2}", 
       (string1.Length >= 20 ? string1.Substring(0, 19) : string1), 
       (string2.Length >= 20 ? string2.Substring(0, 19) : string2), 
       (string3.Length >= 20 ? string3.Substring(0, 19) : string3));

显然,这没有奏效。:-\ 但这基本上是我想要实现的。请原谅这个无聊的问题;我是使用三级运算符的新手。我知道它们是什么以及它们做什么,但是直到现在我还没有找到实施的理由>_>

有没有人对我在这里可能做错的事情有任何建议,或者如果这完全不可能,那么有什么更好的方法?

编辑使用此代码

            string string1 = "Rawr";
            string string2 = "Rawr2";
            string string3 = "Rawr3";

            mobPartLabel.Text = String.Format(
                "String 1: {0} \nString 2: {1} \nString 3: {2}",
                   (string1.Length >= 20 ? string1.Substring(0, 19) : string1),
                   (string2.Length >= 20 ? string2.Substring(0, 19) : string2),
                   (string3.Length >= 20 ? string3.Substring(0, 19) : string3));

我所有的标签都是“字符串 1:”,就是这样。那是完整而完整的标签。:(

4

2 回答 2

3

你的代码工作得很好。可能与标签本身的属性/大小有关。您是否将AutoSize属性设置为false?

于 2013-04-29T16:35:14.073 回答
3

此外,这可能会增加不必要的复杂性,因为您似乎是 .NET 和 C# 的新手,但是使用字符串提供的 Enumerable 类型的 LINQ 扩展方法,我们实际上可以进一步简化这一点,我相信并进行以下更改。

using System.Linq;
{... other usings and namespace/type declarations ...}

        string string1 = "Rawr";
        string string2 = "Rawr2";
        string string3 = "Rawr3";

        mobPartLabel.Text = String.Format(
            "String 1: {0} \nString 2: {1} \nString 3: {2}",
               (string1.Take(20)),
               (string2.Take(20)),
               (string3.Take(20)));

可以说,使用 Enumerable.Aggregate() 可以使这变得更加简单,但这不会是一段友好的代码来介绍给您。这里重要的一点是 Take 方法自然不是字符串类的一部分,而是一个扩展方法 Enumerable.Take(...),它是在类的设计被密封之后添加的,以便为开发人员添加额外的语法糖。

Linq使用扩展方法扩展了几种 BCL 类型(最显着的是Enumerable),这些扩展方法旨在使用lambda 表达式启用流畅的查询表达式。Linq 不适合没有 C# 经验的胆小者学习和使用,但它和 lambda 表达式一样迅速变得司空见惯,因此尽早学会识别它们的用法很重要。当您了解委托、接口,特别是IEnumerable及其与 C# 语言的特殊关系(例如,foreachyield)时,请考虑自己已准备好学习它们

于 2013-04-29T16:42:01.363 回答