小编Ren*_*ene的帖子

为什么浏览器将换行符渲染为空格?

在最长的时间里,我想了解为什么浏览器在呈现的HTML元素之间添加一个空格,当它们之间存在NewLine时,例如:

<span>Hello</span><span>World</span>
Run Code Online (Sandbox Code Playgroud)

上面的html将输出"HelloWorld"字符串, "Hello"和"World"之间没有空格,但是在以下示例中:

<span>Hello</span>
<span>World</span>
Run Code Online (Sandbox Code Playgroud)

上面的html将输出一个"Hello World"字符串,其中包含"Hello"和"World"之间的空格.

现在,我毫不犹豫地接受这只是它工作时间的方式,但是让我感到困惑的是,我总是认为html元素之间的空格(或换行符)在当时并不重要.浏览器将html呈现给用户.

所以我的问题是,如果有人知道这种行为背后的哲学或技术原因.

谢谢.

html

64
推荐指数
4
解决办法
2万
查看次数

C#编译器增强建议

想象一下有人编写以下代码:

string s = "SomeString";
s.ToUpper();
Run Code Online (Sandbox Code Playgroud)

我们都知道在上面的例子中,对"ToUpper()"方法的调用没有意义,因为根本不处理返回的字符串.但是,很多人犯了这个错误,花时间试图解决问题所在,问自己"为什么不是我的'变量上的字符大写"?

因此,如果有一个属性可以应用于"ToUpper()"方法,如果不处理返回对象会产生编译器错误,那么这不是很好吗?类似于以下内容:

[MustHandleReturnValueAttribute]
public string ToUpper()
{
…
}
Run Code Online (Sandbox Code Playgroud)

如果要正确编译此代码,则用户必须处理返回值,如下所示:

string s = "SomeString";
string uppers = s.ToUpper();
Run Code Online (Sandbox Code Playgroud)

我认为这将清楚地表明你必须处理返回值,否则调用该函数是没有意义的.

在字符串示例的情况下,这可能不是什么大问题,但我可以想到其他更合理的原因,为什么这会派上用场.

你们有什么感想?

谢谢.

.net c#

13
推荐指数
2
解决办法
417
查看次数

食人族课程

有一段时间以来,我一直试图解决为什么允许一些"食人族"类编译的原因.

在我继续之前,也许我应该解释一下我称之为"食人族"的课程.不确定我是刚刚发明了这个术语,还是已经存在了一段时间,或者即使我正确使用它,但现在这并不重要.

我基本上把食人族叫做一个消耗自己的类.换句话说,一个类的接口声明了自己类型的成员.例如:

class Foo
{
    public Foo SomeFoo; 
}
Run Code Online (Sandbox Code Playgroud)

如上所示,类Foo有一个类型为Foo(本身)的成员.

现在,我第一次看到这个(很久以前)我没有编译它的东西,但令我惊讶的是它确实编译了.我之所以没有编译的原因,是因为对我来说,这会尖叫某种类型的递归噩梦.

为了使事情进一步复杂化,我决定尝试同样的事情,但使类成为一个结构,如:

struct Foo
{
    public Foo SomeFoo; 
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不会编译,而是你得到错误:类型'Foo'的struct成员'Foo.SomeFoo'导致struct布局中的循环

对我来说,编译错误更有意义,没有错误,但我相信这种行为最合乎逻辑的解释,所以我想知道你们中是否有人可以解释这种行为.

谢谢.

.net c#

11
推荐指数
3
解决办法
1281
查看次数

WPF ListBox ItemsSource StaticResource/Binding问题

给出以下代码:

<Window x:Class="WpfApplication76.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <CollectionViewSource x:Key="myCol">
            <CollectionViewSource.Source>
                <col:ArrayList>
                    <ListBoxItem>Uno</ListBoxItem>
                    <ListBoxItem>Dos</ListBoxItem>
                    <ListBoxItem>Tres</ListBoxItem>
                </col:ArrayList>
            </CollectionViewSource.Source>
        </CollectionViewSource>
    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{StaticResource myCol}" />
        <ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
    </Grid>

</Window>
Run Code Online (Sandbox Code Playgroud)

在这个例子中,

<ListBox ItemsSource="{StaticResource myCol}" />
Run Code Online (Sandbox Code Playgroud)

给我一个错误,抱怨它无法绑定到"CollectionViewSource"对象.

但是另一个列表框:

<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
Run Code Online (Sandbox Code Playgroud)

结合完美.

所以我的问题是为什么一个工作而另一个不工作?最后,是不是两个ItenSources都设置为相同的"CollectionViewSource"对象?

谢谢.

wpf binding wpf-controls staticresource

6
推荐指数
1
解决办法
1万
查看次数

正则表达式替换多个段落(.Net)

自从我上次使用正则表达式以来已经有一段时间了,我有点急于完成某些事情,所以我希望我能快速回答这个快速的问题.

说我有以下文字:

Start
A
B
C
End    
Start
A
B
C
End Start
A
B
C
End
Foo
A
B
C
Bar
Run Code Online (Sandbox Code Playgroud)

我想用管道替换换行符,但只在"开始"和"结束"字之间,以便我的最终结果是:

Start|A|B|C|End    
Start|A|B|C|End Start|A|B|C|End
Foo
A
B
C
Bar
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

.net regex

0
推荐指数
1
解决办法
613
查看次数

标签 统计

.net ×3

c# ×2

binding ×1

html ×1

regex ×1

staticresource ×1

wpf ×1

wpf-controls ×1