我刚刚切换到VS 2015.我有一个较旧的MVC 5应用程序,运行4.52.在VS 2013中,它非常好.
在VS 2015中,我的红色波浪形在我的下面,@Html.TextBoxFor()有一个错误表明:
"Expression <>"类型在未引用的程序集中定义.您必须添加对程序集'System.Core,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的引用.
该项目构建和运行正常 - 但我担心VS 2013中从未发生的IntelliSense错误.好的,所以我尝试按照上面的错误中的建议添加对System.Core的引用,然后我收到此错误:
无法添加对"System.Core"的引用.构建系统已自动引用此组件.
再次,这在VS 2013中很好.
由于某种原因,M1()导致编译器错误,而M2()同样的事情导致没有错误.知道为什么吗?
使用false ==应与使用not运算符相同!.
使用未分配的局部变量'i'
class Program {
static void Main(string[] args) {
int x = 8;
M1(x);
M2(x);
} // Main()
public static void M1(Object obj) {
if (false == (obj is int i)) // Causes ERROR on WriteLine
return;
System.Console.WriteLine(i); // Use of unassigned local variable 'i'
}
public static void M2(Object obj) {
if (!(obj is int i)) // OKAY
return;
System.Console.WriteLine(i);
}
} // class Program
Run Code Online (Sandbox Code Playgroud) 我是BS的新手.我正在从MaxCDN检索Bootstrap CSS和JS文件的v3.3.6.我希望有一种方法可以包括glyphicons但我看不出怎么做.是否可以从CDN中检索glyphicons?
另外,我不明白Bootstrap下载页面在引用"预编译引导程序"时的含义为什么我需要预编译下载与MaxCDN下载.我看到预编译提供了glyphicons所以也许这是唯一的原因.
如果查看.NET Nullable的文档,您将看到:
struct Nullable<T>
Run Code Online (Sandbox Code Playgroud)
请注意,它是一个结构,而不是一个类.
这似乎是一个struct Nullable<T>是不是一个值类型,这是非常意外的.以下代码打印False:
Type nullableType = typeof(Nullable<int>);
Console.WriteLine(nullableType is ValueType);
Run Code Online (Sandbox Code Playgroud)
如果查看生成的IL,您将看到该编译器nullableType在编译时确定为ValueType.但如果它是一个结构,它怎么可能是ValueType?所有结构都是ValueTypes,对吗?显然,它与泛型有关.
我在这里错过了什么?语言规范中是否有关于此的内容?
谢谢.
我已经阅读了C#语言规范(v5.0)的相关部分,但我找不到与我所看到的相关的部分.
如果您运行下面的代码,您将看到下面的输出,这是我所期望的:
using System;
class Test {
static int count = 0;
static void Main() {
Console.WriteLine("In Main(), A.X=" + A.X);
}
public static int F(string message) {
Console.WriteLine(message);
A.X = ++count;
Console.WriteLine("\tA.X has been set to " + A.X);
B.Y = ++count;
Console.WriteLine("\tB.Y has been set to " + B.Y);
return 999;
}
}
class A {
static A() { }
public static int U = Test.F("Init A.U");
public static int X = Test.F("Init A.X");
}
class B { …Run Code Online (Sandbox Code Playgroud) 我的印象是"this"关键字代表范围内的当前所有者.显然,这是错误的.让我来看看代码:
alert(this); // alerts as [object Window] -- Okay
function p1() {
alert(this);
}
var p2 = function() {
alert(this);
}
p1(); // alerts as undefined -- ???
p2(); // alerts as undefined -- ??
window.p1(); // alerts as [object Window] -- Okay
window.p2(); // alerts as [object Window] -- Okay
Run Code Online (Sandbox Code Playgroud)
上面的代码首先警告[对象窗口],正如我所料,但接下来的两次调用p1()和p2()警告"this"为"undefined".最后两次调用p1()和p2()将"this"警告为[object window].
是不是p1()和p2()存在于全局(即窗口)范围内?我认为调用window.p1()与调用p1()同义,就像调用alert()与window.alert()同义一样.
对于我的(C#)思维方式,p1()和p2()属于全局范围.这些函数是全局窗口对象的成员,因此当它们引用"this"时,它们应该引用[object Window].显然,我在这里非常错.
CSS 似乎是右关联的,与编程语言不同,你不能用括号影响它。
我有这样的一般结构:
<div>
<div class='pizza'></div>
</div>
<p>Select me! Select me!</p>
<div>
<div class="pizza">
<p>Do NOT select me!</p>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我无法找出包含 a 的<p>兄弟姐妹之后的a 选择器。<div><div class="pizza">
我尝试了这个,但是 CSS 从右到左的关联性并没有产生我想要的结果:
div > div.pizza + p
Run Code Online (Sandbox Code Playgroud)
我知道这是不对的。
有人可以指点一下吗?
我意识到数组实现IEnumerable<T>"在运行时".根据数据的MSDN文档:
从.NET Framework 2.0开始,Array类实现
System.Collections.Generic.IList<T>,System.Collections.Generic.ICollection<T>以及System.Collections.Generic.IEnumerable<T>通用接口.这些实现在运行时提供给数组,因此,泛型接口不会出现在Array类的声明语法中.
当然,这是正确的.在查看源代码时,Array您会看到它仅实现了非泛型版本IEnumerable.
如果运行下面的代码片段,您将看到泛型Enumerator的类型System.SZArrayHelper+SZGenericArrayEnumerator`1[System.String].
String[] array = new[] { "Apple", "Banana", "Grape" };
IEnumerator enumer = ((IEnumerable<String>)array).GetEnumerator();
// Next line writes: System.SZArrayHelper+SZGenericArrayEnumerator`1[System.String]
Console.WriteLine(enumer.GetType());
Run Code Online (Sandbox Code Playgroud)
我希望有人能够提供一些关于 CLR 如何IEnumerable<T>在运行时实现的见解?实现这一目标的机制是什么?在CLR中是硬编码的还是Array类中有什么东西可以通知CLR动态实现泛型版本?
作为后续工作,我正在阅读"Nutshell中的C#5,0"和第274页,作者声称Array该类必须实现非IEnumerable向后版本的"向后兼容性".有人可以举例说明这种"向后兼容性"的必要性吗?
我正在使用VS 2015 Enterprise,我正在尝试创建一个空的MVC项目.
我右键单击解决方案进入"添加|新建项目..."对话框.然后,我从左侧列表中选择"Web",然后选择"ASP.NET Web Application",如下所示:
接下来,将打开以下对话框窗口,但 "Web窗体","MVC"和"Web API"的复选框均已禁用.有谁知道为什么他们被禁用以及如何启用它们?选择"Web API"或"Web应用程序"(而不是"空")不会更改复选框的状态 - 它们将保持禁用状态.
如果我没记错的话,我曾经能够在VS 2013中创建一个空的MVC项目,没有任何问题.
我试图使用流利(即"方法")语法编写嵌套的GroupBy LINQ表达式.
这是我的课程和数据:
class Person
{
public String ZipCode, Gender, Name;
}
private static List<Person> people = new List<Person>
{
new Person { ZipCode= "11111", Gender = "M", Name = "Tom" },
new Person { ZipCode= "11111", Gender = "M", Name = "Bob" },
new Person { ZipCode= "11111", Gender = "F", Name = "Nancy" },
new Person { ZipCode= "11111", Gender = "F", Name = "Lisa" },
new Person { ZipCode= "22222", Gender = "M", Name = "Dan" }, …Run Code Online (Sandbox Code Playgroud) 我试图在我的页面上创建一个页脚,当用户向上和向下滚动时,它停留在页面底部.我大部分时间都在那里但是我在下面描述了一些问题.
我有一个JSFiddle:https://jsfiddle.net/ay2y73co/
这是我用于我的页脚的代码:
<!-- This fake paragraph only exists to put some space above the footer
so that page content is not hidden by the footer. -->
<p style="height:3.5em;margin:0px;"> </p>
<!-- Here is the footer, proper. -->
<div style="position:fixed;bottom: 0px;left:0px;padding:0.5em; height:3.0em;background-color:rgb(200,200,200);margin: 0px;width:100%;font-size:75%;border: 2px inset red">
<p>I want the right border to show up -- it seems it is clipped by the scrollbar.</p>
</div>
Run Code Online (Sandbox Code Playgroud)
第一个问题是我的页脚的右边框被滚动条遮挡,基本上,它位于滚动条的后面,正如您可以从缺少的右边框看到的那样.
第二个问题本身并不是一个问题,但我不喜欢这样一个事实,即我必须在页脚上方添加一个"假段落",以防止页面内容在页脚后面滚动.它不像一个干净的解决方案.
之前我在同一代码的Debug和Release版本之间发布了一个关于静态初始化器和不同输出的问题.我确定Release版本从Debug构建产生了不同的输出(实际上它没有产生输出),因为一个DebuggableAttribute设置允许JIT优化器消除Release版本中的输出.
我想的越多,它就越困扰我.在我进一步讨论之前,让我展示我原始发布的代码和Debug构建中产生的输出:
using System;
class Test {
static int value = 0;
static int a = Initialize("Assigning a");
static int b = Initialize("Assigning b");
static String name = "Fred";
static int c = Initialize("Assigning c");
static int Initialize(String mssg) {
++value;
Console.WriteLine("In Initialize() :: {0}, name={1}, returning {2}", mssg, name, value);
return value;
} // Initialize()
static void Main() {
}// Main()
} // class Test
Run Code Online (Sandbox Code Playgroud)
此代码的输出(当使用Debug构建运行时)是这样的:
In Initialize() :: Assigning a, …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
static List<string> lst = new List<string>();
public static Task<IEnumerable<String>> GetStrings() {
IEnumerable<String> x = lst;
// This line below compiles just fine.
// return Task.Run(() => x);
// This line gives a compiler error:
// Cannot implicitly convert type 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>' to
// 'System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<string>>'
return Task.Run(() => lst);
}
Run Code Online (Sandbox Code Playgroud)
为什么这一行编译得很好:return Task.Run(() => x);
虽然return Task.Run(() => lst);给出了编译器错误:
无法将类型“System.Threading.Tasks.Task<System.Collections.Generic.List>”隐式转换为“System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable>”
我认为既然List<string>是IEnumerable<string>,我不应该显式设置x. 我的意思是,编译器知道lst是一个IEnumerable<string>.
我想我一定在这里遗漏了一些基本的东西。
c# ×6
css ×2
static ×2
arrays ×1
asp.net-mvc ×1
c#-7.0 ×1
cdn ×1
fixed ×1
footer ×1
glyphicons ×1
group-by ×1
html ×1
ienumerable ×1
initializer ×1
intellisense ×1
javascript ×1
linq ×1
nullable ×1
this ×1