小编Meh*_*ari的帖子

为什么编译器会发出框指令来比较引用类型的实例?

这是一个简单的泛型类型,其唯一的泛型参数约束为引用类型:

class A<T> where T : class
{
    public bool F(T r1, T r2)
    {
        return r1 == r2;
    }
}
Run Code Online (Sandbox Code Playgroud)

csc.exe 生成的IL是:

ldarg.1
box        !T
ldarg.2
box        !T
ceq
Run Code Online (Sandbox Code Playgroud)

因此,在进行比较之前,每个参数都被装箱.

但是,如果约束表明"T"永远不应该是值类型,为什么编译器会尝试框r1r2

c# generics comparison boxing equality

36
推荐指数
2
解决办法
1162
查看次数

LINQ to SQL vs ADO.Net

LINQ to SQL和ADO.net之间有什么区别?

.net ado.net linq-to-sql

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

如何在LINQ中动态添加OR运算符到WHERE子句

我有一个可变大小的字符串数组,我正在尝试以编程方式循环遍历数组并匹配表中的所有行,其中"Tags"列包含数组中的至少一个字符串.这是一些伪代码:

 IQueryable<Songs> allSongMatches = musicDb.Songs; // all rows in the table
Run Code Online (Sandbox Code Playgroud)

我可以轻松地在一组固定的字符串上查询此表过滤,如下所示:

 allSongMatches=allSongMatches.Where(SongsVar => SongsVar.Tags.Contains("foo1") || SongsVar.Tags.Contains("foo2") || SongsVar.Tags.Contains("foo3"));
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用(我得到以下错误:"带有语句体的lambda表达式无法转换为表达式树")

 allSongMatches = allSongMatches.Where(SongsVar =>
     {
       bool retVal = false;
       foreach(string str in strArray)
       {
         retVal = retVal || SongsVar.Tags.Contains(str);
       }
       return retVal;
     });
Run Code Online (Sandbox Code Playgroud)

有人能告诉我完成这个的正确策略吗?我仍然是LINQ世界的新手:-)

linq dynamic linq-to-sql

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

确定类型是否为静态

假设我有一个Type电话type.

我想确定我是否可以使用我的类型执行此操作(实际上不对每种类型执行此操作):

如果type是,System.Windows.Point那么我可以这样做:

Point point1 = new Point();
Run Code Online (Sandbox Code Playgroud)

但是,如果type是,System.Environment那么这将不会飞:

Environment environment1 = new Environment(); //wrong
Run Code Online (Sandbox Code Playgroud)

因此,如果我遍历程序集中的每个可见类型,如何跳过将无法创建第二个实例的所有类型?我对反思很陌生,所以我的术语还不是很好.希望我在这里尝试做的很清楚.

.net c# reflection types instantiation

29
推荐指数
3
解决办法
9368
查看次数

字符串和最终

以下陈述之间有什么区别

String name = "Tiger";

final String name ="Tiger";
Run Code Online (Sandbox Code Playgroud)

虽然String类是finalclass,但为什么我们需要创建一个String"CONSTANT"变量作为final?

java string variables final

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

我在哪里可以找到C#3.0语法?

我打算用C#编写一个C#3.0编译器.我在哪里可以获得解析器生成的语法?

优选地,可以在没有修改的情况下与ANTLR v3一起使用.

c# compiler-construction grammar antlr c#-3.0

27
推荐指数
2
解决办法
2664
查看次数

C#P在64位系统上调用user32.dll

在64位应用程序中,在64位Windows上pinvoke user32.dll是错误的吗?我成功完成了很多次并且从未出现过错误,但这似乎是矛盾的.我应该寻找user64.dll吗?

c# 64-bit pinvoke 32-bit user32

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

在iOS7中边缘滑动时,与UIView同步为键盘设置动画

我希望在iOS7中获得类似于Messages app(在大多数短信应用程序中也很常见)的行为,在对话视图中,从屏幕左边缘向右滑动将表现得像UINavigationController中的后退按钮.

我已设法实现此行为,但是,如果键盘在显示视图中打开,当我开始向后滑动时,键盘会卡住,并且在我移动手指时不会使视图向右移动.我想将键盘和呈现视图设置为一个单元,而不是将键盘放在其他视图的顶部,并且它们在它后面动画,这就是我现在得到的(参见第二个屏幕截图):

(更新:请注意,在主视图动画完成后,键盘最终会消失;我关注的是滑动过程中键盘的位置,以及当您持续触摸设备的一半时,不在与实际视图同步.第二个屏幕截图阐明了这种期望的行为.我也想知道它为什么不是默认行为.)

只需在Xcode 5.0.2中创建一个新的主 - 细节iPhone应用程序,并在StoryBoard中的详细视图(最好是上半部分的某个地方)添加一个文本字段,运行应用程序,添加项目,就可以轻松复制问题. ,点击它以转到详细视图并单击您添加的文本字段.从设备左侧边缘滑动,同时将手指放在上面,您将看到问题.

期望的行为:

期望的行为

目前的行为:

键盘撕裂

iphone keyboard gesture ios ios7

25
推荐指数
2
解决办法
5451
查看次数

确定参数是否在C#中使用反射使用"params"?

考虑这个方法签名:

public static void WriteLine(string input, params object[] myObjects)
{
    // Do stuff.
}
Run Code Online (Sandbox Code Playgroud)

如何确定WriteLine方法的"myObjects"参数使用params关键字并且可以采用变量参数?

.net c# reflection params

24
推荐指数
3
解决办法
3903
查看次数

如何隐藏jpg或gif照片中的信息?

如何在不破坏图像的情况下在jpg或gif等照片文件中写入一些信息?当然没有在照片上显示它,因为整个想法是在任何人未检测到的照片文件中发送信息(在某种程度上提供安全/隐私)!

jpeg information-hiding steganography image gif

22
推荐指数
4
解决办法
5万
查看次数