我理解这些在aspx页面的标记中有什么意义......但我不知道它们可以用于它们的全部功能,甚至不知道这些特殊指令的名称.
例:
我可以把条件语句,如ifs或开关
我已经看到并使用它们来绑定数据集中的数据
任何输入都非常感谢
我不明白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.有人可以更好地解释用例吗?
最近我已经安装了MS Visual Studio 2010 Professional作为2005年的升级版本.我想使用英文版本,但是在安装之后它是德语版(如果重要,2005年是英文).
我试图通过Extras/Options/Environment/International Settings将其更改为"Same as Microsoft Windows"(什么是英语)并重新启动IDE(和系统)但是根本没有应用更改.只有两个选项:德语和windows一样.
我是否错过了安装设置中的某些内容,还是我必须安装语言包?
编辑: 我已经尝试过Rob的建议去卸载Visual Studio及其所有组件,安装英文.net 4.0框架并重新安装Visual Studio,但遗憾的是没有预期的结果.再次是德国人,没有机会转为英语.安装例程似乎覆盖了框架并将其替换为DEU-languagepack.
如果不首先安装英文版,是否真的无法更改IDE语言设置?是否至少可以从框架中获取英语错误消息?
顺便说一句,我是唯一一个想知道为什么我首先需要英文版才能切换语言的人?为什么我要订购除EN以外的任何其他语言?
先感谢您.
也许我没有看到树木,但我被卡住了,所以问题是:
如何将逗号分隔的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)
先感谢您.
我试图使不到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
这一定非常简单.但无论如何我会问它,因为我认为其他人也会挣扎.为什么以下简单的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)
或 …
为什么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)
如果它试图将它转换为decimal我OverflowException在运行时获得
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) 我刚刚从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?(它没有)或不编译.
我很惊讶,无论我是在前置还是附加LINQ扩展方法都没关系.
hugeList.Where(x => x.Text.Contains("10000")).FirstOrDefault();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)这是非常危险的,所以我想知道为什么它是允许的.由于我经常需要在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)
断点条件对话框:

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