小编IAb*_*act的帖子

如何在c#中调用受保护的构造函数?

如何调用受保护的构造函数?

public class Foo{
  public Foo(a lot of arguments){}
  protected Foo(){}
}
var foo=???
Run Code Online (Sandbox Code Playgroud)

这显然未通过测试:

public class FooMock:Foo{}
var foo=new FooMock();
Assert(typeof(Foo), foo.GetType());
Run Code Online (Sandbox Code Playgroud)

c# inheritance constructor

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

在int上使用扩展方法

我正在阅读有关扩展方法的内容,并与他们进行一起讨论,看看它们是如何工作的,我试过这个:

namespace clunk {
    public static class oog {
        public static int doubleMe(this int x) {
            return 2 * x;
        }
    }

    class Program {
        static void Main() {
            Console.WriteLine(5.doubleMe());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并按预期工作,使用doubleMe方法成功扩展int,打印10.

接下来,作为一个老C家伙,我想知道我是否可以这样做:

namespace clunk {
    public static class BoolLikeC {
        public static bool operator true(this int i)  { return i != 0; }
        public static bool operator false(this int i) { return i == 0; }
    }

    class Program {
        static void Main() {
            if ( 7 …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods

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

如何在LINQ-to-SQL中模拟正则表达式

我有一个包含客户帐号的数据库表.在同一个表中是与生产格式不匹配的测试帐户:例如,'A1111'是生产,但'JTest'不是.我有正则表达式只会拉我的生产帐户.我需要一个特定的编译查询来只提取生产帐户.该查询按地区和日期为我提供了客户数量; 和每个地区的概念计数:

        getCustomerDistribution = CompiledQuery.Compile<DataContext, String, DateTime, IEnumerable<ServerLoad>>(
            (context, region, processDate) => (from cust in context.GetTable<tbl_CustomerDistro>()
                                               where cust.ProcessedDate.Date == processDate.Date
                                               where cust.Region == region
                                               where Regex.IsMatch(cust.AcctNum, ProductionMask)
                                               group cust by new
                                               {
                                                   cust.Region,
                                                   cust.Concept
                                               } into custDistro
                                               orderby custDistro.Key.Region
                                               select new CustomerDistro
                                               (
                                                   custDistro.Key.Region,
                                                   custDistro.Key.Concept,
                                                   custDistro
                                                    .Where(c => c.Concept == custDistro.Key.Concept)
                                                    .Select(c => c.Concept).Count()
                                               )));
Run Code Online (Sandbox Code Playgroud)

问题是我在运行时收到以下消息:

方法'Boolean IsMatch(System.String,System.String)'没有支持的SQL转换.

我在看用户定义的函数:

static Func<striing, bool> IsProduction = (AcctNum) => Regex.IsMatch(AcctNum, ProductionMask);
Run Code Online (Sandbox Code Playgroud)

这也不起作用.我不想迭代检索到的记录以进一步过滤,除非没有其他方法可以做到这一点.

有没有办法用Predicate Builder做到这一点?

更新:

我认为另一种选择是使用:

where SqlMethods.Like (cust.AcctNum, ProductionMask)

但是,我的ProductionMask是为Regex编写的:

^[B,G]\d{4}$
Run Code Online (Sandbox Code Playgroud)

有没有办法用SqlMethods.Like(...)做到这一点? …

c# regex linq-to-sql

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

删除后,jquery draggable元素不再可拖动

我希望能够反复拖放相同的源元素.

在拖动图像的那一刻,它被成功克隆 - 即原始图像保持不变并且克隆很好地落入其新位置,但旧图像不再可拖动.检查元素显示class为属性(无值),即不显示class="ui-draggable"

正如你所看到的那样,我试图在克隆之后重新启用可拖动性,但它无法正常工作.

这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> 
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js"></script>
  <title></title>
  <script language="javascript" type="text/javascript">
    var copy = 0;
    var dragOptions = {
      helper: 'clone',
      cursor: 'hand',
      revert: 'invalid'
    };
    $(document).ready(function () {
      $("img").draggable(dragOptions);
      $("ul#bag > li").droppable({
        drop: function (event, ui) {
          copy++;
          var clone = $(ui.draggable).clone().attr("id", "img_" + copy);
          $(this).append(clone);
          clone.css("left", 0).css("top", 0);
          $(ui.draggable).draggable(dragOptions);
        }
      });
    });
</script>
  <style type="text/css">
    li
    {
      position: relative; …
Run Code Online (Sandbox Code Playgroud)

jquery drag-and-drop

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

使用并发启用队列<T>

我有一个先前的问题,我提供了我的解决方案; 但是,ConcurrentQueue<T>因为我在.Net 3.5上,所以我没有访问权限.我需要Queue<T>允许并发.我读了这个问题,如果一个项目不在队列中并且线程方法试图使项目出列,则似乎存在问题.

我现在的任务是确定是否可以派生自己的并发队列类.这就是我想出的:

public sealed class ConcurrentQueue : Queue<DataTable>
{
    public event EventHandler<TableQueuedEventArgs> TableQueued;
    private ICollection que;

    new public void Enqueue(DataTable Table)
    {
        lock (que.SyncRoot)
        {
            base.Enqueue(Table);
        }

        OnTableQueued(new TableQueuedEventArgs(Dequeue()));
    }

    //  this is where I think I will have a problem...
    new public DataTable Dequeue()
    {
        DataTable table;

        lock (que.SyncRoot)
        {
            table = base.Dequeue();
        }

        return table;
    }

    public void OnTableQueued(TableQueuedEventArgs table)
    {
        EventHandler<TableQueuedEventArgs> handler = TableQueued;

        if …
Run Code Online (Sandbox Code Playgroud)

c# queue multithreading .net-3.5

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

Visual Studio-隐藏窗体中的最大化按钮

如何从表单中删除最大化按钮?我已经禁用它但它仍然出现,它只是不起作用.我想要一个只有关闭和最小化按钮的表单.这是一个Windows窗体应用程序,我正在使用Visual Studio 2010.

.net vb.net visual-studio-2010 visual-studio winforms

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

使用jQuery动态添加optgroups

<select id="myElement" multiple="multiple">
  <option value="1">Category Type</option>
  <option value="158">itemOne</option>
  <option value="157">itemTwo</option>
  <option value="7">My Type</option>
  <option value="20">itemThree</option>
  <option value="21">itemFour</option>
  <option value="22">itemFive</option>
  <option value="8">Category Yet Another</option>
  <option value="31">itemCheese</option>
  <option value="32">itemBrain</option>
</select>
Run Code Online (Sandbox Code Playgroud)

我需要动态转换它,以便"类别"选项(任何不以"item"开头的)是一个optgroup,包装whaterver在它之后直到下一个Category选项,所以上面的结果看起来像:

<select id="myElement" multiple="multiple">
  <optGroup label="Category Type">
    <option value="158">One</option>
    <option value="157">Two</option>
  </optGroup>
  <optGroup label="My Type">
    <option value="20">Three</option>
    <option value="21">Four</option>
    <option value="22">Five</option>
  </optGroup>
  <optGroup label="Category Yet Another">
    <option value="31">Cheese</option>
    <option value="32">Brain</option>
  </optGroup>
</select>
Run Code Online (Sandbox Code Playgroud)

我如何迭代这个并更改值以使用jQuery实现所需的效果?

jquery list

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

将字节字符串转换为字节或bytearray

我有一个字符串如下:

  b'\x00\x00\x00\x00\x07\x80\x00\x03'
Run Code Online (Sandbox Code Playgroud)

如何将其转换为字节数组?...并从字节回到一个字符串?

python byte bytearray

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

AppDomain卸载杀死父AppDomain

我无法搞清楚我的AppDomain.Unload(...)电话.我用我之前的问题中的代码详细解释了一下.事实证明,我执行了几个步骤,显然,我不需要.但是,我很确定在创建AppDomain并将其保存在集合中时:

private static Dictionary<string , AppDomain> HostDomains;

void StartNewDomain(string domainName)
{
    AppDomain domain = AppDomain.CreateDomain(domainName);
    HostDomains[domainName] = domain;
}
Run Code Online (Sandbox Code Playgroud)

......当你完成它之后,你必须卸载它:

if (HostDomains.ContainsKey(domainName))
{
    AppDomain.Unload(HostDomains[domainName]);
    HostDomains.Remove(domainName);
}
Run Code Online (Sandbox Code Playgroud)

然后从集合中删除域.

但是,当我卸载域时,整个应用程序正在结束.如果我删除卸载,一切都很好......我们只是从集合中删除域.但我担心我的孩子AppDomain 没有真正卸载.它可能最终得到GC我猜,但这并没有给我一个温暖的模糊.

子AppDomain程序集(Windows窗体应用程序)通过我继承的适配器类中引用的接口(IModule)异步启动MarshalByRefObject.我想知道这个对IModule的Start()(插件模块程序集实现的)的引用是不是正确编组(因为我的实现).因此,当调用Shutdown()方法时,整个应用程序都会死掉.我应该使我的IModule成为一个抽象类,所以它应该继承MBR吗?困惑...

看完我的代码后:

// instances the module for access to the module's Start() method
    IModule module = (IModule)domain.CreateInstanceAndUnwrap(
    ModuleManager.Modules[modName].Name, 
    ModuleManager.Modules[modName].EntryPoint.FullName);
Run Code Online (Sandbox Code Playgroud)

...我担心,因为IModule是一个接口,即使我在子域中创建一个实例,程序集也会泄漏到我的主AppDomain中.因此,当我尝试卸载子域时,两个域都被卸载.这是正确的吗?什么可能是通过MBR(适配器)对象提供Start()和Stop()方法的最佳解决方案?

更新:请参阅下面的答案进行更改 -
好的,没有泄漏 - 一切都继承了MBR:

  1. 主机:MarshalByRefObject - 在新的AppDomain中实例化ModuleAdapter
  2. ModuleAdapter:MarshalByRefObject - IModule接口,接口方法(Start,Stop)
  3. MyModulePlugin:MarshalByRefObject - Application.Run(myForm)

我还做错了吗?我尝试了几件事情,但这似乎是错误的或不完整的.当我告诉ModuleAdapter关闭时,它会调用AppDomain.Unload(AppDomain.CurrentDomain)并且Host域也会停止.我仍然在应用程序退出时获得一些第一次机会异常.但是形式(myForm)已被告知.Close().

所以,我仍在寻找正确的方法......

c# appdomain .net-3.5

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

Tcp可靠性与Udp负载对于认真,高性能的服务器

速度,优化和可扩展性是Udp和Tcp协议之间的典型比较.Tcp吹嘘可靠性有一点额外开销的缺点,但速度很好,非常好.一旦Tcp套接字被实例化,保持套接字打开需要一些开销.但与Udp所描述的负担相比,哪种协议实际上有更多的开销?我也听说过Tcp存在可扩展性问题......但是互联网(网页/服务器)在Tcp上运行 - 那么Tcp是什么阻碍了可扩展性呢?

好的...所以Udp不需要保持连接打开的开销.但是,它要求您编写额外的方法以确保所有数据包都到达那里,希望按照您希望它接收的顺序.如果未完整收到数据包,则必须告知客户端或服务器重新发送.此外,您还必须为部分数据包保留某种消息收集,重建部分消息,并在最终处理消息之前检查完整的消息.更不用说如果消息的第二部分永远不会成功,你必须要么重新发送整个内容,要么重新发送我们缺少的部分,或者其他什么.

基本上,我的问题是:

  1. 为什么我会选择Udp over Tcp作为一个严肃的高性能服务器,增加了消息检查和手动ACK的"开销"与连续流的"开销"?
  2. 如果Tcp对于魔兽世界来说足够好,为什么Tcp不被广泛接受作为游戏服务器使用协议?

注意:我不反对为服务器实现Udp选项.我们在.Net 3.5框架上使用C#.所以我也对处理Udp 负担的最佳实践感兴趣.我也在套接字级别使用异步方法,而不是使用TcpListener,TcpClient等.

c# sockets udp tcp .net-3.5

8
推荐指数
2
解决办法
5724
查看次数