小编Tim*_*ter的帖子

ASP.NET中的<%%>(嵌入式代码块)

我理解这些在aspx页面的标记中有什么意义......但我不知道它们可以用于它们的全部功能,甚至不知道这些特殊指令的名称.

例:

我可以把条件语句,如ifs或开关

我已经看到并使用它们来绑定数据集中的数据

任何输入都非常感谢

asp.net

28
推荐指数
3
解决办法
4万
查看次数

C#7中var模式的好处是什么?

我不明白varC#7 中模式的用例.MSDN:

与模式匹配的var模式总是成功的.它的语法是

expr is var varname
Run Code Online (Sandbox Code Playgroud)

其中expr的值始终分配给名为的局部变量 varname.varname是一个与expr.相同类型的静态变量.

在我看来,MSDN上的例子非常无用,特别是因为它if是多余的:

object[] items = { new Book("The Tempest"), new Person("John") };
foreach (var item in items) {
  if (item is var obj)
    Console.WriteLine($"Type: {obj.GetType().Name}, Value: {obj}"); 
}
Run Code Online (Sandbox Code Playgroud)

在这里我没有看到任何好处,如果你item直接访问也是类型的循环变量,你可以有相同的Object.这if也是令人困惑的,因为它永远不会false.

我可以使用var otherItem = item或使用item.有人可以更好地解释用例吗?

c# pattern-matching c#-7.0

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

MS VS 2010:将语言设置从de更改为en

最近我已经安装了MS Visual Studio 2010 Professional作为2005年的升级版本.我想使用英文版本,但是在安装之后它是德语版(如果重要,2005年是英文).

我试图通过Extras/Options/Environment/International Settings将其更改为"Same as Microsoft Windows"(什么是英语)并重新启动IDE(和系统)但是根本没有应用更改.只有两个选项:德语和windows一样.

事实:

  • MS Visual Studio 2010专业版(从2005专业版升级)德文版
  • 操作系统是Windows XP(英文)
  • 德语是默认输入语言(控制面板/区域... /语言/详细信息),已更改但没有任何效果

我是否错过了安装设置中的某些内容,还是我必须安装语言包?


编辑: 我已经尝试过Rob的建议去卸载Visual Studio及其所有组件,安装英文.net 4.0框架并重新安装Visual Studio,但遗憾的是没有预期的结果.再次是德国人,没有机会转为英语.安装例程似乎覆盖了框架并将其替换为DEU-languagepack.

如果不首先安装英文版,是否真的无法更改IDE语言设置?是否至少可以从框架中获取英语错误消息?

顺便说一句,我是唯一一个想知道为什么我首先需要英文版才能切换语言的人?为什么我要订购除EN以外的任何其他语言?

先感谢您.

.net localization upgrade visual-studio-2010 visual-studio

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

从逗号分隔的varchar-list插入INTO TABLE

也许我没有看到树木,但我被卡住了,所以问题是:

如何将逗号分隔的varchar值列表导入/插入到表中?我的意思不是这样的:

  • '12345678,87654321,11223344' 但是这个:
  • '12345678','87654321','11223344'

我有一个Split功能,但在这种情况下似乎没用,不是吗?

这是一个简单的(模拟SQL)示例来显示我的意思:

Create Table #IMEIS(
    imei varchar(15)
)
INTO INTO #IMEIS(imei)
    SELECT * FROM ('012251000362843', '012251001084784', '012251001168744', '012273007269862', '012291000080227', '012291000383084', '012291000448515')
SELECT * from #IMEIS
DROP TABLE #IMEIS;
Run Code Online (Sandbox Code Playgroud)

先感谢您.

sql t-sql sql-server-2005 insert

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

如何在LINQ中使用DATEADD列 - LINQ无法识别DateAdd

我试图使不到30天前被请求的友谊请求无效.

var requestIgnored = context.Request
    .Where(c => c.IdRequest == result.IdRequest 
             && c.IdRequestTypes == 1 
             && c.Accepted == false 
             && DateTime.Now <= (((DateTime)c.DateResponse).AddDays(30)))
   .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

c.DateResponse是类型的DateTime?.我遇到的错误是:

LINQ无法识别命令.AddDays

c# linq

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

LINQ的延期执行,但如何?

这一定非常简单.但无论如何我会问它,因为我认为其他人也会挣扎.为什么以下简单的LINQ查询不会始终使用新的变量值而不是始终使用第一个?

static void Main(string[] args)
{
    Console.WriteLine("Enter something:");
    string input = Console.ReadLine();       // for example ABC123
    var digits = input.Where(Char.IsDigit);  // 123
    while (digits.Any())
    {
        Console.WriteLine("Enter a string which doesn't contain digits");
        input = Console.ReadLine();         // for example ABC
    }
    Console.WriteLine("Bye");
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

在注释的示例中,它将进入循环,因为输入ABC123包含数字.但它永远不会离开它,即使你输入类似ABC,因为digits仍然是123.

那么为什么LINQ查询不会评估新input值但始终是第一个?

我知道我可以通过这个附加线修复它:

while (digits.Any())
{
    Console.WriteLine("Enter a string which doesn't contain digits");
    input = Console.ReadLine();          
    digits = input.Where(Char.IsDigit);  // now it works as expected
}
Run Code Online (Sandbox Code Playgroud)

或 …

.net c# linq lazy-evaluation

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

Double.MaxValue到整数是否定的?

为什么Double.MaxValue转换为整数类型会产生负值,即该类型的最小值?

double maxDouble = double.MaxValue;       // 1.7976931348623157E+308
long maxDoubleLong = (long) maxDouble;    // -9223372036854775808
Run Code Online (Sandbox Code Playgroud)

我理解编译器错误,如果它太大或OverflowException在运行时或者如果我使用unchecked转换可能不会抛出异常,但结果变得不确定和不正确(负).

同样奇怪的是,价值是long.MinValue:

bool sameAsLongMin = maxDoubleLong == long.MinValue; // true
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果我把它投射到同样的情况int:

int maxDoubleInt = (int)maxDouble;                   // -2147483648
bool sameAsIntMin = maxDoubleInt == int.MinValue;    // true
Run Code Online (Sandbox Code Playgroud)

如果它试图将它转换为decimalOverflowException在运行时获得

decimal maxDoubleDec = (decimal)maxDouble;  // nope
Run Code Online (Sandbox Code Playgroud)

更新:似乎迈克尔和巴雷的答案在头上钉了一针,如果我checked明确使用我得到一个OverflowException:

checked
{
    double maxDouble = double.MaxValue;     // 1.7976931348623157E+308
    long maxDoubleLong = (long) maxDouble;  // …
Run Code Online (Sandbox Code Playgroud)

.net c# casting type-conversion

23
推荐指数
2
解决办法
4825
查看次数

空条件运算符评估bool不bool?正如所料

我刚刚从VS 2010升级到2015.我喜欢新的零条件运算符,也称为零传播.这样可以简化代码,例如:

string firstCustomerName = customers?[0].Name; // null if customers or the first customer is null
Run Code Online (Sandbox Code Playgroud)

另一个:

int? count = customers?[0]?.Orders?.Count();  // null if customers, the first customer, or Orders is null
Run Code Online (Sandbox Code Playgroud)

返回一个Nullable<int>偶数,Enumerable.Count返回一个int以区分有效计数和nulls之前的任何一个.这非常直观,非常有用.

但是为什么这会按预期编译和工作(它返回false):

string text = null;
bool contains = text?.IndexOf("Foo", StringComparison.CurrentCultureIgnoreCase) >= 0;
Run Code Online (Sandbox Code Playgroud)

它应该返回bool?(它没有)或不编译.

.net c# c#-6.0

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

LINQ扩展方法的顺序不影响性能?

我很惊讶,无论我是在前置还是附加LINQ扩展方法都没关系.

经测试Enumerable.FirstOrDefault:

  1. hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault();
  2. hugeList.FirstOrDefault(x => x.Text.Contains("10000"));

    var hugeList = Enumerable.Range(1, 50000000)
        .Select(i => new { ID = i, Text = "Item" + i });
    
    var sw1 = new System.Diagnostics.Stopwatch();
    var sw2 = new System.Diagnostics.Stopwatch();
    
    sw1.Start();
    for(int i=0;i<1000;i++)
        hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault();
    sw1.Stop();
    
    sw2.Start();
    for(int i=0;i<1000;i++)
        hugeList.FirstOrDefault(x => x.Text.Contains("10000"));
    sw2.Stop();
    
    var result1 = String.Format("FirstOrDefault after: {0} FirstOrDefault before: {1}", sw1.Elapsed,  sw2.Elapsed);
    //result1: FirstOrDefault after: 00:00:03.3169683 FirstOrDefault before: 00:00:03.0463219
    
    sw2.Restart();
    for (int i = 0; i < 1000; i++) …
    Run Code Online (Sandbox Code Playgroud)

.net c# linq

20
推荐指数
2
解决办法
2368
查看次数

为什么调试器的断点条件允许赋值语句为bool-condition?

这是非常危险的,所以我想知道为什么它是允许的.由于我经常需要在VB.NET和C#之间切换,我有时会添加断点条件,如下所示:

foo = "bah"
Run Code Online (Sandbox Code Playgroud)

如果string变量foo"bah,我想停止,所以正确的方法是使用foo == "bah"而不是foo = "bah".

但它"有效".在编译或运行时,您不会收到任何警告或错误.但实际上这会修改变量foo,"bah"即使它具有不同的值也会使它始终存在.由于这种情况无声地发生(断点永远不会被击中),因此非常危险.

为什么允许?我的推理错误在哪里(除了混淆C#和VB.NET语法)?在C#中(与VB.NET相反),赋值语句返回已分配的值,因此不是a bool,而是string在这种情况下为a.但是bool如果你选中"Is True"框,则 断点条件必须是a .

这是一个小样本"程序"和来自我(德国)IDE的截图:

static void Main()
{
    string foo = "foo";
    // breakpoint with assignment(foo = "bah") instead of comparison(foo == "bah"):
    Console.WriteLine(foo);  // bah, variable is changed from the breakpoint window
}
Run Code Online (Sandbox Code Playgroud)

断点条件对话框:

在此输入图像描述

作为图像的代码包括断点:

在此输入图像描述

c# vb.net debugging breakpoints visual-studio-2010

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