小编Bri*_*ian的帖子

离散匿名方法共享一个类?

我在这里和Eric Lippert的Ref<T>班级玩了一下.我注意到在IL中看起来两个匿名方法都使用相同的生成类,即使这意味着类有一个额外的变量.

虽然只使用一个新的类定义似乎有点合理,但我觉得只<>c__DisplayClass2创建一个实例非常奇怪.这似乎暗示两个实例Ref<T>都引用相同的<>c__DisplayClass2 意思并不意味着y在收集之前无法vart1收集,这可能比joik返回之后发生得晚得多?毕竟,不能保证一些白痴不会写一个直接y通过vart1aftrer joik返回的函数(直接在IL中).也许这甚至可以通过反射而不是疯狂的IL来完成.

sealed class Ref<T>
{
    public delegate T Func<T>();
    private readonly Func<T> getter;
    public Ref(Func<T> getter)
    {
        this.getter = getter;
    }
    public T Value { get { return getter(); } }
}

static Ref<int> joik()
{
    int[] y = new int[50000];
    int x = 5;
    Ref<int> vart1 = new Ref<int>(delegate() { return x; });
    Ref<int[]> vart2 …
Run Code Online (Sandbox Code Playgroud)

c# delegates anonymous-methods

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

更快的字符串GetHashCode(例如使用多核或GPU)

根据http://www.codeguru.com/forum/showthread.php?t=463663,3.5中的C#getHashCode功能实现为:

public override unsafe int GetHashCode()
{
    fixed (char* str = ((char*) this))
    {
        char* chPtr = str;
        int num = 0x15051505;
        int num2 = num;
        int* numPtr = (int*) chPtr;
        for (int i = this.Length; i > 0; i -= 4)
        {
            num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
            if (i <= 2)
            {
                break;
            }
            num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1]; …
Run Code Online (Sandbox Code Playgroud)

.net c# optimization

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

重用SqlDataRecord是否安全?

在实现表值参数时,生成IEnumerable<SqlDataRecord>参数使用的最常见方法之一是这样的代码(例如,https://stackoverflow.com/a/10779567/18192):

public static IEnumerable<SqlDataRecord> Rows(List<int> simpletable)
{
    var smd = new []{ new SqlMetaData("id", SqlDbType.Int)};
    var sqlRow = new SqlDataRecord(smd);
    foreach (int i in simpletable)
    {
        sqlRow.SetInt32(0, i);
        yield return sqlRow;
    }
}
//...
var param = sqlCmd.Parameters.AddWithValue("@retailerIDs", Rows(mydata)); 
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "myTypeName";
Run Code Online (Sandbox Code Playgroud)

这段代码似乎确实有效.虽然重用SqlMetaData并没有引发太多的警钟,但声明SqlDataRecord外面的foreach循环让我感到非常怀疑:

修改可变对象,然后重复生成.

作为一个关于这个问题的一个例子,var x = Rows(new[] { 100, 200}.ToList()).ToList().Dump()在LinqPad中调用吐出来200,200.这种方法似乎依赖于实现细节(行是单独处理的),但我没有看到任何承诺这样做的文档.

是否有一些减轻因素使这种方法安全?

c# sql-server table-valued-parameters

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

Internet Explorer和<select>标记问题

我在Internet Explorer 7/8下遇到以下问题:

我有一个弹出窗口,当用户鼠标悬停链接时会被激活.弹出窗口是一个简单的<div>包含一些数据.在这个<div>标签里面有一个<select>带有<option>s 的标签.我已将mouseover/mouseout事件附加到<div>,这样当光标在它上面时,此弹出窗口将保持打开状态.当您单击<select>然后将光标移动到任何<option>s上时,会出现问题.这会触发<div>标记的mouseout事件并分别关闭它.

如何防止在IE中关闭弹出窗口?

javascript jquery internet-explorer javascript-events

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

为什么Array.Copy支持长参数

来自MSDN:

参数sourceArray

包含要复制的数据的Array.destinationArray

接收数据的Array.长度

一个64位整数,表示要复制的元素数.整数必须介于0和Int32.MaxValue之间(包括0和Int32.MaxValue)

鉴于值的允许范围是0Int32.MaxValue,什么是添加此签名的动机是什么?它在.Net 1.0中不存在,只在.Net 1.1中添加.我唯一的猜测是准备64位框架实现.

c# arrays

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

您希望使用通用语言的哪些功能?

您希望使用通用语言的哪些功能?更准确地说,我的意思是通常根本不存在的功能,但很高兴看到,而不是"我希望动态打字很受欢迎".

language-features

7
推荐指数
5
解决办法
603
查看次数

减少代码重复:调用具有略微不同签名的函数

假设我有两个看起来像这样的函数:

public static void myFunction1(int a, int b, int c, string d)
{
    //dostuff
    someoneelsesfunction(c,d);
    //dostuff2
}

public static void myFunction2(int a, int b, int c, Stream d)
{
    //dostuff
    someoneelsesfunction(c,d);
    //dostuff2
}
Run Code Online (Sandbox Code Playgroud)

什么是避免重复dostuff的好方法?

我想过的想法,但不喜欢:

  1. 我可以根据类型制作一个对象并按照runtype进行投射,但这让我觉得不理想; 它删除了以前在编译时发生的类型检查.
  2. 我还可以编写一个私有帮助器类,它接受一个对象并将两个签名都写为公共函数.
  3. 我可以用委托或函数调用等替换dostuff和dostuff2.

c# refactoring

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

扩展作业测试平台,包括代码分析(C/C++)

我正在维护/开发一个家庭作业测试平台.它主要是自动的.我现在需要添加的是代码分析.我需要检查特定结构的代码.

例如:

该文件是否main.cpp包含user使用const方法 命名的类get_name()

是否有一些工具可以让我做这些东西(理想的是可以编写脚本的东西).仅限Linux.

c++ linux code-analysis static-code-analysis

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

chrome.app在哪里正式记录?

查看http://code.google.com/chrome/extensions/api_index.html,我无法找到任何文档chrome.app.我没有chrome.app.getDetails()上班的麻烦,但我想知道是否有任何形式的官方文件(或者为什么不,如果没有).

google-chrome-extension

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

C#代码简化查询:顺序Foreach循环

假设我有一些看起来像这样的代码:

foreach(type x in list y)
{
   //dostuff1(x)
}

foreach(type x in list y)
{
   //dostuff2(x)
}

foreach(type x in list y)
{
   //dostuff3(x)
}

foreach(type x in list y)
{
   //dostuff4(x)
}

foreach(type x in list y)
{
   //dostuff5(x)
}
Run Code Online (Sandbox Code Playgroud)

我无法将事物组合成一个像这样的大循环:

foreach (type x in list y)
{
    //dostuff1(x)
    //dostuff2(x)
    //dostuff3(x)
    //dostuff4(x)
    //dostuff5(x)
}
Run Code Online (Sandbox Code Playgroud)

这样做会改变顺序.有关在C#中使代码更简单的最佳方法的任何评论?

我想我可以通过创建这样的函数来解决这个问题,尽管我宁愿保持它的方式而不是强迫我的代码的未来读者理解yield:

void func(type x)
{
    dostuff1(x)
    yield 0;
    dostuff2(x)
    yield 0;
    dostuff3(x)
    yield 0;
    dostuff4(x)
    yield 0;
    dostuff5(x)
    yield break;
}

for …
Run Code Online (Sandbox Code Playgroud)

c#

6
推荐指数
3
解决办法
1150
查看次数