问题列表 - 第39006页

StringBuilder在调用ToString后变得不可变吗?

我清楚地记得从早期的.NET开始,在StringBuilder上调用ToString用于提供新的字符串对象(要返回)与StringBuilder使用的内部char缓冲区.这样,如果使用StringBuilder构造了一个巨大的字符串,则调用ToString不必复制它.

在这样做时,StringBuilder必须阻止对缓冲区的任何其他更改,因为它现在由不可变字符串使用.因此,StringBuilder将切换到"复制更改",其中任何尝试的更改将首先创建新缓冲区,将旧缓冲区的内容复制到它,然后才更改它.

我认为假设StringBuilder将用于构造一个字符串,然后转换为常规字符串并丢弃.对我来说似乎是一个合理的假设.

现在就是这个.我在文档中找不到任何提及.但我不确定它是否有记录.

所以我使用Reflector(.NET 4.0)查看了ToString的实现,在我看来它实际上是复制字符串,而不是仅仅共享缓冲区:

[SecuritySafeCritical]
public override unsafe string ToString()
{
    string str = string.FastAllocateString(this.Length);
    StringBuilder chunkPrevious = this;
    fixed (char* str2 = ((char*) str))
    {
        char* chPtr = str2;
        do
        {
            if (chunkPrevious.m_ChunkLength > 0)
            {
                char[] chunkChars = chunkPrevious.m_ChunkChars;
                int chunkOffset = chunkPrevious.m_ChunkOffset;
                int chunkLength = chunkPrevious.m_ChunkLength;
                if ((((ulong) (chunkLength + chunkOffset)) > str.Length) ||     (chunkLength > chunkChars.Length))
                {
                    throw new ArgumentOutOfRangeException("chunkLength",     Environment.GetResourceString("ArgumentOutOfRange_Index"));
                }
                fixed (char* chRef = chunkChars)
                {
                    string.wstrcpy(chPtr + chunkOffset, chRef, chunkLength);
                } …
Run Code Online (Sandbox Code Playgroud)

.net stringbuilder tostring immutability copy-on-write

15
推荐指数
2
解决办法
1921
查看次数

SQL WHERE子句将值与尾随空格匹配

在SQL Server 2008中,我有一个名为Zone列的表ZoneReference varchar(50) not null作为主键.

如果我运行以下查询:

select '"' + ZoneReference + '"' as QuotedZoneReference
from Zone
where ZoneReference = 'WF11XU'
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

"WF11XU "
Run Code Online (Sandbox Code Playgroud)

请注意尾随空格.

这怎么可能?如果该行的尾随空间确实存在,那么我希望返回结果,所以我假设它是SQL Server Management Studio奇怪显示的其他东西.

在C#中,代码调用zoneReference.Trim()将其删除,表明它是某种空白字符.

有人可以帮忙吗?

c# sql database sql-server sql-server-2008

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

无法建立连接,因为目标计算机主动拒绝它 - 使用Socket或TcpClient

很多人都有同样的问题,但每个人的实现都不同.

我需要帮助实现它.

void sendUsingTcp() 
{
    try 
    {
        Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(172.16.8.200), 8000);
        sock.Connect(endPoint);
        // code past this never hits because the line above fails
    } 
    catch (SocketException err) 
    {
        MessageBox.Show(err.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过直接使用相同错误结果的TCP客户端:

void sendUsingTcp() 
{
    try 
    {
        using (TcpClient client = new TcpClient()) 
        {
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(172.16.8.200), 8000);
            client.Connect(endPoint);
            // code past this never hits because the line above fails
        }
    } 
    catch (SocketException err) 
    {
        MessageBox.Show(err.Message);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# tcpclient visual-studio-2008 winforms

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

在python中获取活动的gtk窗口

我如何获取gtk.Windowpython中的active句柄?(不是我创建的窗口,而是当前聚焦的窗口)。

python gtk

3
推荐指数
1
解决办法
3959
查看次数

用于VLIW体系结构的LLVM编译器基础结构

您知道LLVM编译器基础架构中存在多么强大的VLIW体系结构(或EPIC,如Itanium)支持吗?

这是否有好的文件/幻灯片资料?

cross-platform llvm epic vliw

9
推荐指数
1
解决办法
1577
查看次数

这个tty上的标签有多少个空格

我有一个写入stdout的perl脚本,这是一个tty.有没有办法确定该tty上的选项卡有多少个空格?

perl spacing tty terminfo

2
推荐指数
1
解决办法
300
查看次数

强制Maven2将源jar下载到本地存储库

我在Nexus存储库中有我的公司依赖项(包括非FOSS第三方的东西),包括源jar(下载的mvn dependency:resolve),如果可用的话.

我想将源jar(和javadoc jar)下载到我的本地repository(~/.m2/repository),以便我可以"离线".

我尝试了各种组合mvn dependency:resolve dependency:go-offline -Dclassifier=sources,但它似乎没有将它们复制到我的本地存储库.

谢谢.

dependencies maven-2

11
推荐指数
1
解决办法
7468
查看次数

如何在LEX/FLEX中编写非贪婪的匹配?

我正在尝试使用FLEX和BISON解析遗留语言(类似于'C').除了匹配字符串之外,一切都很好用.

这种相当奇怪的遗留语言不支持在字符串文字中引用字符,因此以下都是有效的字符串文字:

"hello"
""
"\"
Run Code Online (Sandbox Code Playgroud)

我正在使用以下规则来匹配字符串文字:

\".*\"            { yylval.strval = _strdup( yytext ); return LIT_STRING; }
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是一个贪婪的匹配,所以它匹配如下代码:

"hello", "world"
Run Code Online (Sandbox Code Playgroud)

作为单个字符串(hello", "world).

通常的非贪婪量词.*?似乎在FLEX中不起作用.有任何想法吗?

regex lex flex-lexer

12
推荐指数
1
解决办法
3908
查看次数

为什么Object#hashCode()返回int而不是long

为什么不:

public native long hashCode();
Run Code Online (Sandbox Code Playgroud)

代替:

public native int hashCode();
Run Code Online (Sandbox Code Playgroud)

更高的机会获得唯一的哈希码?

java

20
推荐指数
1
解决办法
4525
查看次数

滑动抽屉采用相同的布局

你知道如何实现与winamp相同的Android效果吗?我想做类似的事情.那是我点击listview,滑动抽屉弹出窗口.但到目前为止,我只能在不同的新活动中展示滑动抽屉.

如何在重叠视图中实现.那是当我关闭抽屉时,布局显示在前面,滑动手柄在布局上,当我打开抽屉时,它覆盖了主要布局.

关于那个的任何想法?

谢谢 !!

android slidingdrawer

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