我清楚地记得从早期的.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) 在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()将其删除,表明它是某种空白字符.
有人可以帮忙吗?
很多人都有同样的问题,但每个人的实现都不同.
我需要帮助实现它.
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) 我如何获取gtk.Windowpython中的active句柄?(不是我创建的窗口,而是当前聚焦的窗口)。
我有一个写入stdout的perl脚本,这是一个tty.有没有办法确定该tty上的选项卡有多少个空格?
我在Nexus存储库中有我的公司依赖项(包括非FOSS第三方的东西),包括源jar(下载的mvn dependency:resolve),如果可用的话.
我想将源jar(和javadoc jar)下载到我的本地repository(~/.m2/repository),以便我可以"离线".
我尝试了各种组合mvn dependency:resolve dependency:go-offline -Dclassifier=sources,但它似乎没有将它们复制到我的本地存储库.
谢谢.
我正在尝试使用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中不起作用.有任何想法吗?
为什么不:
public native long hashCode();
Run Code Online (Sandbox Code Playgroud)
代替:
public native int hashCode();
Run Code Online (Sandbox Code Playgroud)
更高的机会获得唯一的哈希码?
你知道如何实现与winamp相同的Android效果吗?我想做类似的事情.那是我点击listview,滑动抽屉弹出窗口.但到目前为止,我只能在不同的新活动中展示滑动抽屉.
如何在重叠视图中实现.那是当我关闭抽屉时,布局显示在前面,滑动手柄在布局上,当我打开抽屉时,它覆盖了主要布局.
关于那个的任何想法?
谢谢 !!