好吧,最近,我遇到了一个有趣的问题.在潜在(实际上)无限递归序列中生成第n个值.这个特定的算法将在其成功的深度处至少10-15个堆栈引用.我的第一个想法是抛出看起来像这样的(C#)的SuccessException:
class SuccessException : Exception
{
public string Value
{ get; set; }
public SuccessException(string value)
: base()
{
Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后做这样的事情:
try
{
Walk_r(tree);
}
catch (SuccessException ex)
{
result = ex.Value;
}
Run Code Online (Sandbox Code Playgroud)
然后我的思绪在这里徘徊,在那里我一遍又一遍地听到从未使用Exceptions进行流量控制.有没有借口?如果你要实现它,你将如何构建这样的东西呢?
今天我正在玩我的一个项目并找到一个有趣的小片段,给定以下模式,你可以安全地清理一个线程,即使它被迫提前关闭.我的项目是一个网络服务器,它为每个客户端生成一个新线程.我发现这对于从远程端提前终止是有用的,但也可以从本地端(我可以.Abort()从我的处理代码中调用).
你有什么问题可以看到,或者你对任何看过类似方法的人提出的建议是什么?
测试用例如下:
using System;
using System.Threading;
class Program
{
static Thread t1 = new Thread(thread1);
static Thread t2 = new Thread(thread2);
public static void Main(string[] args)
{
t1.Start();
t2.Start();
t1.Join();
}
public static void thread1() {
try {
// Do our work here, for this test just look busy.
while(true) {
Thread.Sleep(100);
}
} finally {
Console.WriteLine("We're exiting thread1 cleanly.\n");
// Do any cleanup that might be needed here.
}
}
public static void thread2() {
Thread.Sleep(500); …Run Code Online (Sandbox Code Playgroud) 析构函数应该只释放对象所持有的非托管资源,并且不应该引用其他对象.如果您只有托管引用,则不需要(也不应该)实现析构函数.您希望这仅用于处理非托管资源.因为拥有析构函数需要一些成本,所以你应该只在消耗有价值的非托管资源的方法上实现它.
文章没有深入讨论这个问题,但在C#中使用析构函数会涉及哪些成本?
注意:我知道GC以及在可靠的时候没有调用析构函数的事实,除此之外,还有什么吗?
我有以下代码:
public class Foo {}
static class Program {
[XmlElement("foo")] // Ignored :(
static public List<Foo> MyFoos { get; private set; }
public static void Main() {
MyFoos.Add(new Foo());
MyFoos.Add(new Foo());
XmlSerializer configSerializer =
new XmlSerializer(typeof(List<Foo>), new XmlRootAttribute("foos"));
using (TextWriter w = new StreamWriter("test.xml"))
{
s.Serialize(w, MyFoos);
}
}
}
Run Code Online (Sandbox Code Playgroud)
其中生成以下XML文件:
<?xml version="1.0" encoding="utf-8"?>
<foos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Foo />
<Foo />
</foos>
Run Code Online (Sandbox Code Playgroud)
我真正想要的是Foo标记为的元素foo,而不是......我意识到这主要是装饰性的,但它符合XML中通常被认为是正常的.
在ASP.NET中,当您为标记提供ID时,它会根据控件层次结构为元素生成唯一的HTML ID,即.
<asp:Panel ID="test" runat="server">
...
</asp:Panel>
<!-- Becomes... -->
<div id="plc_lt_zoneContent_PagePlaceholder_PagePlaceholder_lt_test_test">
...
</div>
Run Code Online (Sandbox Code Playgroud)
有没有办法确定代码隐藏文件中生成的id?我需要生成一些使用id的Javascript.
如何<p></p>在Fckeditor中禁用自动添加标签.
当我试图从fckeditor获取任何帖子数据时,它会给我包含的数据
我该如何删除/禁用它们<p></p>
提前感谢任何建议和回复
Torrent永远不会取代HTTP,甚至FTP下载选项.这就是说,为什么在更多网站上这些选项旁边没有torrent链接?
我正在想象一个网络系统,下载的文件可以通过HTTP下载,比如说http://example.com/downloads/files/myFile.tar.bz2,种子可以廉价自动生成并存储/downloads/torrents/myFile.tar.bz2.torrent,跟踪器可能是/downloads/tracker/.
跟踪器是一个明确定义的问题,并且实现起来并不难以置信,并且已经存在许多替代方案.我想在这里定制一个可以做到这一点并不困难.
自动生成的torrent文件可以包含普通的HTTP服务器作为永久种子,大多数(如果不是全部)主要的torrent客户端都很好地支持这样做的扩展,并且不需要在服务器端重新配置或使用特殊的东西(它使用库存标准HTTP范围标题).
就个人而言,如果我设置这样一个系统,我会将/downloads/files/目录速度限制在合理的范围内,比如说40-50kb/s,具体取决于你究竟要服务的内容.
这样的文件传送系统是否存在?你是否会使用它:对你的个人,公司或其他网站?
免费使用BitKeeper的能力已被版权所有者Larry McVoy撤回,因为他声称Andrew Tridgell违反BitKeeper许可证反向设计了BitKeeper协议.在Linux.Conf.Au 2005上,Tridgell在他的主题演讲中证明了他使用的逆向工程过程只是telnet到BitKeeper服务器的相应端口并输入"help".
- [维基百科上的Git](http://en.wikipedia.org/wiki/Git_ ( software)#Early_history)
有时并不总是某人泄露您的文档或源代码,而是因为有人不记得删除一两个实用程序功能.您有什么样的流程和程序来阻止这些"泄漏"通过?
我正在编写一个实用程序(http://reg2run.sf.net),如果没有参数的执行作为Windows应用程序(显示OpenFileDialog等),否则 - 作为控制台应用程序.
因此,在第一种情况下,我不想显示控制台窗口,这就是为什么项目是Windows应用程序.但在第二个 - 我需要展示它,它是用它创建的
if (ptrNew == IntPtr.Zero)
{
ptrNew = GetStdHandle(-11);
}
if (!AllocConsole())
{
throw new ExternalCallException("AllocConsole");
}
ptrNew = CreateFile("CONOUT$", 0x40000000, 2, IntPtr.Zero, 3, 0, IntPtr.Zero);
if (!SetStdHandle(-11, ptrNew))
{
throw new ExternalCallException("SetStdHandle");
}
StreamWriter newOut = new StreamWriter(Console.OpenStandardOutput());
newOut.AutoFlush = true;
Console.SetOut(newOut);
Console.SetError(newOut);
Run Code Online (Sandbox Code Playgroud)
我想要的是 - 获取父进程标准输出并使用它,如果它存在(如果通过cmd.exe或远程管理器执行).我该怎么做?
我试过了
static Process GetParentProc()
{
int pidParent = 0;
int pidCurrent = Process.GetCurrentProcess().Id;
IntPtr hSnapshot = CreateToolhelp32Snapshot(2, 0);
if (hSnapshot == IntPtr.Zero)
{
return null;
} …Run Code Online (Sandbox Code Playgroud) 为了争论,我有一个object.我无法修改我的函数的签名,因为我正在扩展其他人的类.
举一个具体的例子,我有以下内容:
class Foo<T> : SomeBaseClass
{
public override MyFunction(object value)
{
// TODO: Figure out if value is an instance of Foo, though I don't care
// what type was associated with it.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法确保这value是某种Foo类型的实例?
c# ×4
.net ×2
algorithm ×1
asp.net ×1
bittorrent ×1
console ×1
control-flow ×1
destructor ×1
exception ×1
fckeditor ×1
finalizer ×1
html ×1
http ×1
idisposable ×1
javascript ×1
winapi ×1
xml ×1