小编Mat*_*ith的帖子

转换& 到等等

我想转换&为&,"到"等等.在没有手动编写所有选项的情况下,c#中是否有一个函数可以做到这一点?

c# html-encode string-conversion

58
推荐指数
4
解决办法
9万
查看次数

为什么我的ASP.Net静态函数的"上下文"在用户会话之间交叉?

我想我需要一些帮助来理解静态对象如何在ASP.Net应用程序中持续存在.我有这种情况:

类库中的someFile.cs:

public delegate void CustomFunction();

public static class A {
    public static CustomFunction Func = null;
}
Run Code Online (Sandbox Code Playgroud)

类库中的someOtherFile.cs:

public class Q {
    public Q() {
        if (A.Func != null) {
            A.Func();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

一些ASP.Net页面:

Page_Init {
    A.Func = MyFunc;
}

public void MyFunc() {
    System.IO.File.AppendAllText(
        "mydebug.txt", DateTime.Now.ToString("hh/mm/ss.fff", Session.SessionID));
}

Page_Load {
    Q myQ = new Q();
    System.Threading.Thread.Sleep(20000);
    mQ = new Q();
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,我有一个业务对象,它根据UI级别的回调函数执行一些操作.我将回调函数设置为Page_Init上的静态变量(在实际代码版本中,在主页面中,如果这有所不同).我认为页面的每次执行,无论它来自哪个用户会话,都会通过该函数的逻辑,但是在自己的数据集上运行.似乎正在发生的是并发问题.

如果我运行一个用户会话,那么当它在对该回调函数的调用之间休眠时,启动另一个用户会话,当第一个会话从休眠状态返回时,它从第二个用户会话中获取会话ID.这怎么可能?

mydebug.txt的输出:

01/01/01.000 abababababab  (session #1, first call)
01/01/05.000 cdcdcdcdcdcd  (session #2, first call - …
Run Code Online (Sandbox Code Playgroud)

asp.net static-methods

7
推荐指数
2
解决办法
2629
查看次数

引用自身的外键列的效果(或目的)是什么?

在数据库迁移期间,我遇到了以下形式的数据库表约束:

ALTER TABLE [dbo].[myTable]
ADD CONSTRAINT [someName] FOREIGN KEY ([id]) REFERENCES [dbo].[myTable] ([id])
ON DELETE NO ACTION
ON UPDATE NO ACTION
Run Code Online (Sandbox Code Playgroud)

为什么会这样做?这最初是在Sybase数据库上完成的,我们正在转换为SQL Server 2008 R2.

更新:是的,外键约束是引用相同表和相同字段的字段.

我在源Sybase数据库上运行了这个查询,发现定义了42个这些疯狂的键,所以它似乎不是一个错字.

SELECT sr.constrid as [Constraint ID],
       so.name as [Table],
       sc.name as [Column]
  FROM sysreferences sr
       INNER JOIN sysobjects so ON (so.id = sr.tableid)
       INNER JOIN syscolumns sc ON (sc.id = sr.tableid AND sc.colid = sr.fokey1)
 WHERE sr.tableid = sr.reftabid
   AND sr.fokey1 = sr.refkey1
   AND sr.fokey2 = 0
   AND sr.refkey2 = 0
Run Code Online (Sandbox Code Playgroud)

sql sybase sql-server-2008-r2

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

当一个对象超出.Net的范围时,可以运行代码吗?

一旦变量失去.Net语言的范围,有没有办法"自动"运行终结/析构函数代码?在我看来,由于垃圾收集器在不确定的时间运行,因此一旦变量失去范围,析构函数代码就不会运行.我意识到我可以从IDisposable继承并在我的对象上显式调用Dispose,但我希望可能有更多不干涉的解决方案,类似于non.Net C++处理对象破坏的方式.

期望的行为(C#):

public class A {
    ~A { [some code I would like to run] }
}

public void SomeFreeFunction() {
    SomeFreeSubFunction();
    // At this point, I would like my destructor code to have already run.
}

public void SomeFreeSubFunction() {
    A myA = new A();
}
Run Code Online (Sandbox Code Playgroud)

不太理想:

public class A : IDisposable {
    [ destructor code, Dispose method, etc. etc.]
}

public void SomeFreeFunction() {
    SomeFreeSubFunction();
}

public void SomeFreeSubFunction() {
    A myA = new A();
    try { …
Run Code Online (Sandbox Code Playgroud)

.net finalizer

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

仅当条件为true时,才从函数返回单行语句吗?

在C#中,是否有任何语法糖可以在单个语句中执行以下操作(基本上是有条件的返回):

public SomeBaseType MyFunction()
{
    // Can the two statements below be combined into one?
    SomeBaseType something = SomeFunction();
    if ( something != null ) { return something; }
    // End of statements regarding this question.


    // Do lots of other statements...
    return somethingElseThatIsADerivedTypeThatDoesntMatter;
}
Run Code Online (Sandbox Code Playgroud)

c# if-statement conditional-statements

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