String.Format基于三级表达式的结果?

时间:2013-04-29 16:11:55

标签: c# string if-statement

我有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));

显然,这不起作用。 : - \但它基本上是我想要实现的。请原谅这个noobish问题;我是新手使用第三级运营商。我知道他们是什么以及他们做了什么,但我从来没有找到理由去实施一个> _>

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

编辑使用此代码

            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:”就是这样。这是完整而完整的标签。 :(

2 个答案:

答案 0 :(得分:3)

您的代码运行正常。可能是标签本身的属性/大小的东西。 您是否将AutoSize属性设置为false?

答案 1 :(得分: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方法本身并不是字符串类的一部分,而是在类的设计被密封后添加的extension method Enumerable.Take(...),以便为开发人员添加额外的语法糖。

Linq扩展了几种BCL类型(最值得注意的是Enumerable),其扩展方法旨在使用lambda expressions启用流畅的查询表达式。 Linq不适合胆小的人在没有C#经验的情况下接受和使用,但它正在变得越来越普遍,因为lambda表达式,所以学习早期识别它们的用法很重要。当您理解委托,界面,特别是IEnumerable及其与C#语言的特殊关系(例如,foreachyield

时,请考虑自己准备好学习它们。