小编Asp*_*Net的帖子

为什么即使条件求值为false,也会在IF语句中声明变量?

由于永远不会声明@A,因此sql server应该抛出错误,但事实并非如此.这是为什么?

DECLARE @i int = 1;
IF @i > 10
BEGIN
  DECLARE @A int = 100;
END

PRINT @A; // doesn't return any result
Run Code Online (Sandbox Code Playgroud)

感谢名单

sql t-sql sql-server

18
推荐指数
2
解决办法
9546
查看次数

由于字符串是不可变的,具有相同字符串值的变量是否指向相同的字符串对象?

一个)

        string s  = "value";
        string s1 = "value";
Run Code Online (Sandbox Code Playgroud)

s和s1引用变量是否指向相同的字符串对象(我假设这是因为字符串是不可变的)?

b)我意识到已经重新定义了相等运算符(==,> etc)来比较字符串对象的值,但是在使用静态方法Object.Equals()和Object.ReferenceEquals()比较两个字符串时是否相同?

感谢名单

.net c# string

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

无法分配委托具有较少特定参数类型的匿名方法

我能够分配的方法M,以委托对象d与不太具体参数类型,但是当我想用相同的签名方法分配一个匿名方法Md,我得到一个错误.

这是为什么?

class derivedEventArgs : EventArgs { }

delegate void newDelegate(object o, derivedEventArgs e); 

static void Main(string[] args)
{
    newDelegate d = M; // ok
                d = (object o, EventArgs e) => { }; // error
}

public static void M(object o, EventArgs e) { }
Run Code Online (Sandbox Code Playgroud)

.net c# delegates

14
推荐指数
2
解决办法
1447
查看次数

很少有关于锁的令人困惑的事情

我知道如何在我的应用程序中使用锁,但是我对锁定还不太了解(BTW - 我知道lock语句只是使用Monitor类类型的简写符号).

来自http://msdn.microsoft.com/en-us/library/ms173179.aspx:

 public class TestThreading
 {
     private System.Object lockThis = new System.Object();

     public void Function()
     {

         lock (lockThis)
         {
            // Access thread-sensitive resources.
         }
     }
  }
Run Code Online (Sandbox Code Playgroud)

提供给lock关键字的参数必须是基于引用类型的对象,并用于定义锁的范围.在上面的示例中,锁定范围仅限于此函数,因为在函数外部不存在对象lockThis的引用.如果确实存在这样的引用,则锁定范围将扩展到该对象.

a)我不明白lockThis对象如何定义锁的范围.锁的范围是锁(lockThis){和相邻}之间的所有代码,那么"锁定范围将扩展到该对象"究竟是什么意思?

b)术语锁定对象锁定 是什么意思?只是我们使用lockThis的引用来锁定代码区域?因此,该术语并不表示我们锁定了lockThis这个对象?

感谢名单


回复David Morton:

如果我的答复有点冗长,我道歉,但我想不出任何其他方式来表达我的问题,仍然有点连贯:

  1. 在这种情况下,锁的范围是类本身的单个实例.这与跨越特定类的所有实例相反.你可以通过使lockThis静态来锁定所有实例TestThreading.这就是锁的"范围"的含义:它是适用于单个实例,还是适用于特定类型的每个实例.

其他对象仍然可以从另一个线程访问lockThis,但是它们无法处理被该对象上的锁包围的代码.

如果我们调用由lock(位于TestThreading.Function内)C包围的代码,那么由于TestThreading.Function不是静态的,每个TestThreading实例都有自己的C副本.但是如果TestThreading.Function是静态的,那么所有TestThreading实例都将共享相同的C副本.作为类比,如果C是一个房间,如果TestThreading.Function不是静态的,那么每个TestThreading实例都有自己的C空间,但如果函数是静态的,那么所有TestThreading实例将共享相同的C空间.

按照这个类比,我将lockThis解释为C室 …

.net c# multithreading

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

应该使用代表的常见情况是什么?

我理解代表和事件是如何工作的.我还可以想象一些我们应该实现事件的常见场景,但是我很难理解在什么情况下应该使用委托.

感谢名单

回复用户KVB的帖子:

一个)

您基本上可以使用委托,否则您将使用单方法接口.

我想我有点理解以下内容:

  • C类可以定义方法CM,它将接口IM作为参数.此接口将定义IM.A方法,因此任何想要调用CM的人都需要实现此接口.

  • 或者,方法CM可以将(而不是接口IM)作为具有与方法IM.A相同的签名的委托D作为参数.

但我不明白的是,为什么不能CM也为它的参数使用委托d即使我们的接口IM 定义的方法之外其他几种方法?因此,C类的其他方法可能需要接口IM作为其参数,但CM可能需要委托D(假设CM只需要调用方法A而不是IM中定义的任何其他方法)?

b)

var list = new List<int>(new[] { 1, 2, 3 });
var item = list.Find(i => i % 2 == 0);
Run Code Online (Sandbox Code Playgroud)
  • 上面的代码是用户jpbochi调用(参见hers /他在这个帖子中的帖子)依赖注入的例子吗?

  • 我假设上面的代码无法使用事件而不是"纯"代理实现?

.net c# delegates

13
推荐指数
3
解决办法
4427
查看次数

为什么x ++的优先级高于++ x?

后增量++运算符的优先级高于preincrement ++运算符是什么意思?因此,是否存在与++ x具有相同优先级的x ++会导致表达式返回错误结果的情况?

c#

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

将lambda表达式转换为表达式树

从C#深入:

并非所有lambda表达式都可以转换为表达式树.您不能将带有语句块的lambda(甚至只是一个return语句)转换为表达式树 - >它必须采用仅评估单个表达式的形式.

由于Linq-to-Object语句不会转换为表达式树对象,因此与Linq-to-Object运算符一起使用的lambda表达式可以包含一个语句块

        string[] count = { "one ", "two ", "three ", "four ", "five ", "six " };
        IEnumerable<int> result = count.Select(item =>
                               {
                                   Console.WriteLine(item);
                                   return item.Length;
                               });
        foreach (int i in result);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

one two three four five six
Run Code Online (Sandbox Code Playgroud)

我还没有开始学习Linq-To-Sql或Linq-To-Entities,但我认为用于LINQ语句的lambda表达式IQueryable<T>只能包含一个表达式,因为只有一个表达式可以被转换进入表达树?

谢谢

linq lambda

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

使活动符合Net准则有什么好处?

我了解如何根据Net Framework指南使用事件,但使用此模式有什么好处?

http://msdn.microsoft.com/en-us/library/aa645739%28VS.71%29.aspx:

.NET Framework准则指出用于事件的委托类型应该采用两个参数,一个"对象源"参数指示事件的来源,一个"e"参数封装有关该事件的任何其他信息."e"参数的类型应该来自EventArgs类.对于不使用任何其他信息的事件,.NET Framework已经定义了适当的委托类型:EventHandler.

a)我看到使用"对象源"值作为第一个参数的一些好处,因为有些情况下多个对象可以将它们的事件设置为相同的方法.因此,例如,如果我们有10个对象,并且如果所有10个对象将它们的事件设置为事件处理程序M,那么在M内部我们可以使用"object sender"参数值来标识事件调用的发起者.

  • 但据我所知,"对象源"参数仅在事件方法中引发事件时才有用.因此,如果在静态方法中引发了事件,那么"对象源"参数是没有用的?!

b)根据Net Framework准则使用事件是否还有其他好处?

c)无论可能带来什么好处,为什么他们会超越必须的麻烦

  • 编写一个额外的代码,将所需的参数放入从EventArgs派生的对象中
  • 在事件处理程序中编写一个额外的代码,以从EventArgs派生的对象中提取信息?

谢谢

.net c# events

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

为什么BeginInvoke不返回AsyncResult类型的引用?

当您调用委托对象的BeginInvoke时,系统会创建AsyncResult类型的对象,但BeginInvoke会返回IAsyncResult类型的引用(指向AsyncResult实例).为什么BeginInvoke不返回AsyncResult类型的引用?

感谢名单

.net c# delegates

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

查询/子查询什么时候返回 NULL,什么时候根本没有值?

    \n
  1. 如果查询/子查询没有找到任何匹配的行,那么它要么返回 NULL,要么根本不返回任何值,因此甚至不是 NULL 值。基于什么标准,查询/子查询返回 NULL,何时返回任何结果,甚至不返回 NULL 值?

  2. \n
  3. 当找不到匹配的行时,标量子查询是否总是返回 NULL?\n 我假设如果没有找到行,最外层标量查询也会返回\nNULL?

  4. \n
  5. SELECT FirstName, LastName, YEAR(BirthDate)\nFROM Persons\nWHERE YEAR(BirthDate) IN (SELECT YearReleased FROM Albums);\n
    Run Code Online (Sandbox Code Playgroud)\n\n
      \n
    • 如果子查询没有找到结果,则外部查询的 WHERE 子句是否会翻译为WHERE YEAR(BirthDate) IN (null);?

    • \n
    • 如果 WHERE 子句被翻译成WHERE YEAR(BirthDate) IN();相反,\xe2\x80\x99t 不应该是一个错误条件,因为YEAR(BirthDate)值如何与空进行比较?

    • \n
  6. \n
\n

sql sql-server subquery

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

标签 统计

c# ×7

.net ×6

delegates ×3

sql ×2

sql-server ×2

events ×1

lambda ×1

linq ×1

multithreading ×1

string ×1

subquery ×1

t-sql ×1